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