如何用PHP控制Arduino

电子说

1.3w人已加入

描述

步骤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中的串行端口

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;//重置搜索}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分