步驟1:平臺(tái)兼容性
此方法在Windows下將無(wú)法使用。我不能告訴你我花了多長(zhǎng)時(shí)間才弄清楚。在Windows和Linux下,我們使用的命令fopen()的實(shí)現(xiàn)方式不同,因此必須使用Linux。以前沒(méi)用過(guò)?別著急,還不錯(cuò)。
步驟2:設(shè)置服務(wù)器
您需要獲取運(yùn)行PHP的服務(wù)器才能正常工作。我將假設(shè)您擁有Ubuntu的新副本。字面上有成千上萬(wàn)的有關(guān)如何安裝Ubuntu的教程,因此,如果您不這樣做,我將向您推薦。
打開(kāi)終端并輸入:
sudo apt-get install php5 mysql-server apache2
它將提示您輸入MySQL的root用戶密碼,因此請(qǐng)輸入一個(gè)密碼。
打開(kāi)瀏覽器,然后轉(zhuǎn)到http://localhost。您應(yīng)該看到一個(gè)頁(yè)面,上面寫(xiě)著“有效!”。接下來(lái)在終端中運(yùn)行此命令:
sudo gedit/var/www/info.php
并粘貼以下代碼:
《?php
phpinfo();
?》
保存并關(guān)閉文件,然后運(yùn)行
sudo service apache2 restart
轉(zhuǎn)到http://localhost/info.php
,您應(yīng)該看到一個(gè)紫色表,其中包含一堆PHP東西。如果這樣做,恭喜!您現(xiàn)在正在運(yùn)行PHP服務(wù)器。接下來(lái),讓我們建立一個(gè)頁(yè)面來(lái)控制Arduino。
步驟3:觸摸PHP中的串行端口
該技術(shù)的核心是fopen()命令。這通常用于打開(kāi)文檔以在代碼中進(jìn)行編輯(例如,如果您編寫(xiě)了一個(gè)腳本來(lái)制作一個(gè)包含一些信息的文本文件并保存它)。相反,我們將利用linux如何查看文件并在端口上使用它。從Ubuntu軟件管理器安裝Arduino。插入您的Arduino并打開(kāi)arduino窗口。您應(yīng)該在端口菜單下看到設(shè)備名稱??赡苁?dev/ttyUSB0或類(lèi)似的名稱。以下是一些示例代碼,這些代碼將打開(kāi)該端口作為文件,并根據(jù)所按下的按鈕將數(shù)字1寫(xiě)入6:
《?php
$ verz =“ 1.0”;
$ comPort =“/開(kāi)發(fā)/ttyUSB0“ ;/*更改為正確的通訊端口*/
如果(isset($ _ POST [“ rcmd”])){
$ rcmd = $ _POST [“ rcmd”];
開(kāi)關(guān)($ rcmd){
case Stop:
$ fp = fopen($ comPort,“ w”);
fwrite($ fp,1);/*這是它將寫(xiě)入的數(shù)字*/
fclose($ fp);
break;
case慢:
$ fp = fopen($ comPort,“ w”);
fwrite($ fp,2);/*這是它將寫(xiě)入的數(shù)字*/
fclose($ fp);
break;
case中:
$ fp = fopen($ comPort,“ w”);
fwrite($ fp,3);/*這是它將寫(xiě)入的數(shù)字*/
fclose($ fp);
break;
區(qū)分大小寫(xiě):
$ fp = fopen($ comPort,“ w”);
fwrite($ fp,4);/*這是它將寫(xiě)入的數(shù)字*/
fclose($ fp);
break;
case右:
$ fp = fopen($ comPort,“ w”);
fwrite($ fp,5);/*這是它將寫(xiě)入的數(shù)字*/
fclose($ fp);
中斷;
左寫(xiě):
$ fp = fopen($ comPort,“ w”);
fwrite($ fp,6);/*這是它將寫(xiě)入的數(shù)字*/
fclose($ fp);
中斷;
默認(rèn)值:
die(‘廢話,出了點(diǎn)問(wèn)題。頁(yè)面剛剛?cè)??!?;
}
}
?》
來(lái)自Arduino的PHP示例
版本《?php回聲$ verz; ?》
”》
&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nspspnbsp br》 《輸入類(lèi)型=“提交” value =“停止” name =“ rcmd”》
《輸入》 =“提交” value =“慢” name =“ rcmd”》
《輸入類(lèi)型=“提交” value =“ Medium” name =“ rcmd”》
《輸入類(lèi)型=“提交” value =“快速” name =“ rcmd”》
第4步:工作原理和Arduino方面
每次單擊頁(yè)面上的按鈕按下case語(yǔ)句,然后打開(kāi)“文件”(實(shí)際上是端口),進(jìn)入寫(xiě)入模式,寫(xiě)入單個(gè)ASCII數(shù)字,然后將其關(guān)閉。您每次都必須關(guān)閉它,否則它將不起作用。在Arduino方面,只需在loop()中使用Serial.read()從串行端口讀取。我使用了一個(gè)大的if語(yǔ)句來(lái)檢查每個(gè)ASCII碼,因此如果發(fā)送了1,則執(zhí)行一件事,如果發(fā)送2,則執(zhí)行另一件事,依此類(lèi)推。由于您正在運(yùn)行PHP服務(wù)器,因此可以訪問(wèn)以下頁(yè)面來(lái)自世界各地的服務(wù)器,它將控制Arduino。下面是一些我用來(lái)控制某些馬達(dá)的arduino代碼示例:
#include
//首先,設(shè)置伺服器
Servo伺服1;
Servo伺服2;
int debugPin = 13;//用于導(dǎo)致測(cè)試的東西
int motor1Pin = 9;//第一個(gè)電動(dòng)機(jī)的端口號(hào)
int motor2Pin = 10;//第二個(gè)電動(dòng)機(jī)的端口號(hào)
int usbnumber = 0;//此變量保存我們當(dāng)前從串行讀取的內(nèi)容
void setup(){//在開(kāi)始時(shí)調(diào)用一次
pinMode(motor1Pin,OUTPUT);
pinMode(debugPin,OUTPUT);
pinMode(motor2Pin,OUTPUT);
伺服1.attach(motor1Pin,1000,2000);
伺服2.attach(motor2Pin,1000,2000);
Serial.begin(9600);//啟動(dòng)串行端口
}
void loop(){//主循環(huán)
if(Serial.available()》 0){//如果串行端口上有任何東西,請(qǐng)讀取
usbnumber = Serial.read();//將其存儲(chǔ)在usbnumber變量中
}
if(usbnumber》 0){//如果我們讀取了某些內(nèi)容
if(usbnumber == 49){
Serve1.write(93);
Serve2.write(93);//如果我們讀到1,則停止
analogWrite(debugPin,0);
}
if(usbnumber == 50){ 120);
Serve2.write(120);//如果讀取的是2,則
AnalogWrite(debugPin,85);
}
if(usbnumber == 51){
Serve1.write(150);
Serve2.write (150);//如果我們讀取了3個(gè)中號(hào)
AnalogWrite(debugPin,170);
}
if(usbnumber == 52){
Serve1.write(179);
Serve2.write (179);//如果我們讀取4,則快速
AnalogWrite(debugPin,255);
}
if(usbnumber == 53){
Serve1.write(130);
Serve2.write (50);//如果我們讀到5,則
AnalogWrite(debugPin,255);
}
if(usbnumber == 54){
Serve1.write(50);
Serve2.write (130);//如果我們讀到6,則
AnalogWrite(debugPin,255);
}
}
usbnumber = 0;//重置搜索}
-
PHP
+關(guān)注
關(guān)注
0文章
452瀏覽量
26576 -
Arduino
+關(guān)注
關(guān)注
187文章
6453瀏覽量
185929
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論