前段时间接触过射频模块的通信,实际应用过程中却达不到理想的效果,射频模块在ms级的响应效果不尽人意,所以转战更高级的WIFI模块。
需求如下:需要检测两个开关的先后通断,发送<起始>和<结束>信号给另外的设备处理。
基本思路:通过两个WIFI模块搭建实时通信,由两块Arduino nano作为处理载体,分别处理信号的发送、接收和输出。
因为手头有2560,考虑到在同一个板子上进行调试的方便性(2560有4组串口通信),所以先调试完再把程序分成两部分,分别写入两块Arduino nano。
查阅资料可得到ESP8266的AT指令,本次需要用到的指令代码如下:
服务器端:(波特率为115200)
1.AT+CWMODE=3 >将模块设置为softAP+station 共存模式
2.AT+RST >重启
3.AT+CWSAP="ESP236","183023090",11,3 >开启无线路由器,名称和密码可自行定义
4.AT+CIPMUX=1 >设置为单路连接
5.AT+CIPSERVER=1,8080 >8080是端口号,可以自己设定
6.AT+CIFSR >查询IP MAC 地址 ,记住返回的IP地址
客户端:
1.AT+CWMODE=3 >把模块设置为softAP+station 共存模式
2.AT+RST >重启
3.AT+CWJAP="ESP236","183023090" >连接到无线路由器
4.AT+CIPMUX=0 >设置单链接
5.AT+CIPMODE=1 >设置单透传模式
6.AT+CIPSTART="TCP","192.168.4.1",8080 >连接到刚刚建立的TCP服务器上
7.AT+CIPSEND >开启透传模式,返回符号 "<"
8.输入:1234 >发送1234到服务器 (取消勾选发送回车)
若发送连续的 +++ 则退出透传模式
正常情况下,经过以上的设置就能把两个模块通过TCP连接起来
接下来是Arduino的代码编写:
思路:用2560的2、3端口检测开关触发边沿,分别经Serial1发送两个不同的数据,用Serial2接收数据,判断数据再输出低电平到4、5端口
代码还在优化调试中,待完成后会发在下一篇博客文章中。