wifi shield v3应用实例,远程控制arduino引脚电平

2014-07-043万
AI 快速预览详细 收起
本文介绍了使用WIFI扩展板V3 RPSMA接口远程控制Arduino Uno的2~13号引脚电平的方法。首先设置静态IP地址为192.168.0.30,并将WIFI扩展板V3设为TCP-Server模式,端口号设为8088。接着在电脑上使用putty软件输入命令,如open 13点亮13引脚上的LED,close 13关闭它。通过这种方式,可以轻松实现远程控制Arduino的功能。
用到的硬件:
DFRduino UNO R3
WIFI扩展板 V3 RPSMA接口


首先是wifi shield v3的设置,直接看图吧,不懂的可以参考这里
wifi shield v3应用实例,远程控制arduino引脚电平图2
这里要输入你自己要连的无线路由和密码,并设置静态IP地址,
这里设置自己的ip为192.168.0.30
wifi shield v3应用实例,远程控制arduino引脚电平图1wifi shield v3应用实例,远程控制arduino引脚电平图3


这里将模式设置为TCP-Server(就是服务器模式),端口号设为8088(自定义)
wifi shield v3应用实例,远程控制arduino引脚电平图4



接着上代码:
  1. /*
  2. *        作者:        lisper (lisper.li@dfrobot.com)
  3. *        使用Uno + WIFI扩展板 V3 RPSMA接口
  4. *        官方产品链接:        https://www.dfrobot.com.cn/goods-861.html
  5. *        功能:        通过电脑wifi控制Arduino Uno的2~13号引脚的电平
  6. *
  7. *        需要的库:        DFRobot_utility
  8. *        下载链接:        https://github.com/DFRobot/DFRobot_utility
  9. *        电脑端需要的软件:putty
  10. *        下载链接:        https://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
  11. *        当前wifi shield设为服务器模式
  12. */
  13. #include <DFRobot_utility.h>        //包含DFRobot_utility库头文件
  14. #define RECVBUF_MAX 20        //设定数据缓冲区大小      
  15. #define COMMAND_MAX 2        //设定命令参数的最大长度
  16. uint8_t recvBuf[RECVBUF_MAX];        //声明一个数组用来数据缓存
  17. char* command[COMMAND_MAX];        //声明一个指针数组用来从recbBuf获得多个参数
  18. void setup () {
  19.         Serial.begin (115200);                //设置串口0的波特率为115200,与WIFI SHIELD设置一致
  20.         for (int i=2; i<= 13; i++) {        //设置2~13引脚为输出模式
  21.                 pinMode (i, OUTPUT);
  22.         }
  23. }
  24. void loop () {
  25.         //从Serial最大读入RECVBUF_MAX-1的数据到recvBuf, 超时时间为3毫秒
  26.         int recvLeng = serialReads (Serial, recvBuf, RECVBUF_MAX-1, 3);
  27.         if (recvLeng) {
  28.                 int cmdleng = split (command, (char*)recvBuf, COMMAND_MAX);        //拆分数据为多个命令参数
  29.                 if (cmdleng == 1) {        //如果参数的个数为1
  30.                         if ( strcmp(command[0], "hello") == 0) {        //如果客户端输入hello
  31.                                 Serial.println ("I am here!");                //向客户返回:I am here!
  32.                         }
  33.                 }
  34.                 else if (cmdleng == 2) {        //如果参数的个数为2
  35.                         if (strcmp (command[0], "open") == 0) {        //如果客户端输入的第一个参数为open
  36.                                 int pin = atoi (command[1]);                //将第二个参数转为整数,即引脚号
  37.                                 if (pin >=2  && pin <= 13) {
  38.                                         digitalWrite (pin, HIGH);        //相应引脚输出高电平
  39.                                         Serial.println ("ok");                //向客户返回:ok
  40.                                 }
  41.                         }
  42.                         else if (strcmp (command[0], "close") == 0) {        //如果客户端输入的第一个参数为close
  43.                                 int pin = atoi (command[1]);           //将第二个参数转为整数,即引脚号
  44.                                 if (pin >=2  && pin <= 13) {        
  45.                                         digitalWrite (pin, LOW);                //相应引脚输出低电平
  46.                                         Serial.println ("ok");
  47.                                 }
  48.                         }
  49.                 }
  50.         }
  51. }
复制代码


接着,电脑上打开putty,输入服务器(就是arduino+wifi shield)的IP地址和端口号,Connection type选择Raw
wifi shield v3应用实例,远程控制arduino引脚电平图5

点open,在出现的窗口中输入hello,如果不出意外的话arduino会向我们返回"I am here!"
接着输入open 13,就会点亮13引脚上的led,再输入close 13就会关掉它
wifi shield v3应用实例,远程控制arduino引脚电平图6





创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(8)
gaojice
gaojice
楼主,硬件软件反复对比多遍,应该没啥问题,但是当输入"hello"以后会一直收到"i am here!i am here!i am here!i am here!i am here!i am here!i am here!i am here!i am here!i am here!....."
江鸟
江鸟回复gaojice
请问这个问题解决了么 我也遇到了
shazhengq
shazhengq
版主您好!看了你的文章用处很大。就是有一点,按照您的方法试验结果发现,用串口监视器可以控制,通讯调试软件可以收到返回信息。但是通讯调试软件不能发送信息,LED无法点亮。求解~~~
lisper
lisper
作者
回复shazhengq
QQ1462541487
shazhengq
shazhengq回复lisper
谢谢您的回答,就是您介绍的软件。要不您给个联系方式,我截图给您。实在是万分感谢~~~~~~~
共3条回复,已加载2条,点击查看更多共3条回复,已加载全部
lisper
lisper
作者
电脑发送的数据会从串口Serial读取到recvBuf里
nealscut
nealscut
电脑用wifi发送的数据会自动存在#define RECVBUF_MAX 20 里面????
uno读取电脑发送数据的语句,是这一句不: int recvLeng = serialReads (Serial, recvBuf, RECVBUF_MAX-1, 3);????
我这样理解对不对?
不懂电脑发送的数据存在uno的哪里,然后用什么样的方式去读取这些数据。
大神求教。
lisper
lisper
作者
回复nealscut
不行,只能这么写int recvLeng = serialReads (Serial, recvBuf, RECVBUF_MAX-1, 3);
nealscut
nealscut回复lisper
意思是会默认存在recvBuf里面??
要用SerialRead 命令来读取是吧?
像这样子:
int led1=SerialRead(recvBuf); //就可以读取recvBuf的数据(wifi发过来的数据)了?
刚刚接触,很多不懂,大神指教
共3条回复,已加载2条,点击查看更多共3条回复,已加载全部
him
him
为什么我在putty里面收不到i am here呢,我用ide的串口监视器发hello是可以的,putty会打印监视器发的hello这是为什么?哪里设置错了?
Youyou
Youyou回复him
端口连接成功了吗?还有看看开关是不是打在arduino端?
bty2000
bty2000
为什么我的板卡插上之后,笔记本找不到wifi shield v3 的网络呢
lisper
lisper
作者
回复bty2000
那就不清楚了
bty2000
bty2000回复lisper
有的啊 除了link灯没有亮,其它pwr和ready灯都亮了啊
共5条回复,已加载2条,点击查看更多共5条回复,已加载全部
ntgeralt
ntgeralt
不错
我也玩wifi板,推荐你在手机安装wifi tcp/udp controller应用,玩法更多
lisper
lisper
作者
回复ntgeralt
我没有安卓手机。。。
lauren
lauren
不明觉厉,LZ什么是合法字符?。
lisper
lisper
作者
回复lauren
C中的字符串以数值0结尾,之前说过了。。。
- 没有更多了 -