lisper 发表于 2014-7-4 19:00:19

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

用到的硬件:
DFRduino UNO R3
WIFI扩展板 V3 RPSMA接口


首先是wifi shield v3的设置,直接看图吧,不懂的可以参考这里

这里要输入你自己要连的无线路由和密码,并设置静态IP地址,
这里设置自己的ip为192.168.0.30



这里将模式设置为TCP-Server(就是服务器模式),端口号设为8088(自定义)




接着上代码:/*
*      作者:      lisper (lisper.li@dfrobot.com)
*      使用Uno + WIFI扩展板 V3 RPSMA接口
*      官方产品链接:      https://www.dfrobot.com.cn/goods-861.html
*      功能:      通过电脑wifi控制arduino Uno的2~13号引脚的电平
*
*      需要的库:      DFRobot_utility
*      下载链接:      https://github.com/DFRobot/DFRobot_utility
*      电脑端需要的软件:putty
*      下载链接:      https://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
*      当前wifi shield设为服务器模式
*/

#include <DFRobot_utility.h>      //包含DFRobot_utility库头文件

#define RECVBUF_MAX 20      //设定数据缓冲区大小      
#define COMMAND_MAX 2      //设定命令参数的最大长度

uint8_t recvBuf;      //声明一个数组用来数据缓存
char* command;      //声明一个指针数组用来从recbBuf获得多个参数

void setup () {
      Serial.begin (115200);                //设置串口0的波特率为115200,与WIFI SHIELD设置一致

      for (int i=2; i<= 13; i++) {      //设置2~13引脚为输出模式
                pinMode (i, OUTPUT);
      }
}

void loop () {
      //从Serial最大读入RECVBUF_MAX-1的数据到recvBuf, 超时时间为3毫秒
      int recvLeng = serialReads (Serial, recvBuf, RECVBUF_MAX-1, 3);
      if (recvLeng) {
                int cmdleng = split (command, (char*)recvBuf, COMMAND_MAX);      //拆分数据为多个命令参数
                if (cmdleng == 1) {      //如果参数的个数为1
                        if ( strcmp(command, "hello") == 0) {      //如果客户端输入hello
                              Serial.println ("I am here!");                //向客户返回:I am here!
                        }
                }
                else if (cmdleng == 2) {      //如果参数的个数为2
                        if (strcmp (command, "open") == 0) {      //如果客户端输入的第一个参数为open
                              int pin = atoi (command);                //将第二个参数转为整数,即引脚号
                              if (pin >=2&& pin <= 13) {
                                        digitalWrite (pin, HIGH);      //相应引脚输出高电平
                                        Serial.println ("ok");                //向客户返回:ok
                              }
                        }
                        else if (strcmp (command, "close") == 0) {      //如果客户端输入的第一个参数为close
                              int pin = atoi (command);         //将第二个参数转为整数,即引脚号
                              if (pin >=2&& pin <= 13) {      
                                        digitalWrite (pin, LOW);                //相应引脚输出低电平
                                        Serial.println ("ok");
                              }
                        }
                }
      }
}


接着,电脑上打开putty,输入服务器(就是arduino+wifi shield)的IP地址和端口号,Connection type选择Raw


点open,在出现的窗口中输入hello,如果不出意外的话arduino会向我们返回"I am here!"
接着输入open 13,就会点亮13引脚上的led,再输入close 13就会关掉它






nealscut 发表于 2015-1-21 17:03:30

lisper 发表于 2015-1-21 10:57
电脑发送的数据会从串口Serial读取到recvBuf里

意思是会默认存在recvBuf里面??
要用SerialRead 命令来读取是吧?
像这样子:
int led1=SerialRead(recvBuf);//就可以读取recvBuf的数据(wifi发过来的数据)了?

刚刚接触,很多不懂,大神指教

nealscut 发表于 2015-1-21 10:33:51

电脑用wifi发送的数据会自动存在#define RECVBUF_MAX 20 里面????
uno读取电脑发送数据的语句,是这一句不: int recvLeng = serialReads (Serial, recvBuf, RECVBUF_MAX-1, 3);????
我这样理解对不对?

不懂电脑发送的数据存在uno的哪里,然后用什么样的方式去读取这些数据。
大神求教。

Youyou 发表于 2015-1-11 20:45:24

him 发表于 2015-1-8 20:48
为什么我在putty里面收不到i am here呢,我用ide的串口监视器发hello是可以的,putty会打印监视器发的hello ...

端口连接成功了吗?还有看看开关是不是打在arduino端?

lauren 发表于 2014-7-5 02:34:58

不明觉厉,LZ什么是合法字符?。

lisper 发表于 2014-7-5 11:23:17

lauren 发表于 2014-7-5 02:34
不明觉厉,LZ什么是合法字符?。

C中的字符串以数值0结尾,之前说过了。。。

ntgeralt 发表于 2014-7-13 10:24:09

不错
我也玩wifi板,推荐你在手机安装wifi tcp/udp controller应用,玩法更多

lisper 发表于 2014-7-13 16:06:05

ntgeralt 发表于 2014-7-13 10:24
不错
我也玩wifi板,推荐你在手机安装wifi tcp/udp controller应用,玩法更多

我没有安卓手机。。。

bty2000 发表于 2014-8-7 19:25:16

为什么我的板卡插上之后,笔记本找不到wifi shield v3 的网络呢

lisper 发表于 2014-8-7 20:50:36

bty2000 发表于 2014-8-7 19:25
为什么我的板卡插上之后,笔记本找不到wifi shield v3 的网络呢

是不是改名了?

bty2000 发表于 2014-8-8 08:41:45

lisper 发表于 2014-8-7 20:50
是不是改名了?

改成什么了 看了一下都不像么:(

lisper 发表于 2014-8-8 09:29:44

bty2000 发表于 2014-8-8 08:41
改成什么了 看了一下都不像么

你没改应该就没有改,你确定wifi扩展板有电?

bty2000 发表于 2014-8-8 10:43:17

lisper 发表于 2014-8-8 09:29
你没改应该就没有改,你确定wifi扩展板有电?

有的啊 除了link灯没有亮,其它pwr和ready灯都亮了啊

lisper 发表于 2014-8-10 11:33:43

bty2000 发表于 2014-8-8 10:43
有的啊 除了link灯没有亮,其它pwr和ready灯都亮了啊

那就不清楚了

him 发表于 2015-1-8 20:48:21

为什么我在putty里面收不到i am here呢,我用ide的串口监视器发hello是可以的,putty会打印监视器发的hello这是为什么?哪里设置错了?

lisper 发表于 2015-1-21 10:57:31

电脑发送的数据会从串口Serial读取到recvBuf里

lisper 发表于 2015-1-21 10:57:52

nealscut 发表于 2015-1-21 10:33
电脑用wifi发送的数据会自动存在#define RECVBUF_MAX 20 里面????
uno读取电脑发送数据的语句,是这一 ...

电脑发送的数据会从串口Serial读取到recvBuf里

lisper 发表于 2015-1-22 12:06:59

nealscut 发表于 2015-1-21 17:03
意思是会默认存在recvBuf里面??
要用SerialRead 命令来读取是吧?
像这样子:


不行,只能这么写int recvLeng = serialReads (Serial, recvBuf, RECVBUF_MAX-1, 3);

shazhengq 发表于 2015-4-30 12:51:22

版主您好!看了你的文章用处很大。就是有一点,按照您的方法试验结果发现,用串口监视器可以控制,通讯调试软件可以收到返回信息。但是通讯调试软件不能发送信息,LED无法点亮。求解~~~

lisper 发表于 2015-5-3 19:20:50

shazhengq 发表于 2015-4-30 12:51
版主您好!看了你的文章用处很大。就是有一点,按照您的方法试验结果发现,用串口监视器可以控制,通讯调试 ...

你用的什么通讯调试软件?为什么不能发送信息?

shazhengq 发表于 2015-5-4 09:00:30

lisper 发表于 2015-5-3 19:20
你用的什么通讯调试软件?为什么不能发送信息?

谢谢您的回答,就是您介绍的软件。要不您给个联系方式,我截图给您。实在是万分感谢~~~~~~~
页: [1] 2
查看完整版本: wifi shield v3应用实例,远程控制arduino引脚电平