完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
原材料:
Arduino Nano 单片机一个 这里我用的nano esp8266 首先接线要注意的就是esp8266上的CH_DP或者EN要接3.3V其他的按照规律接就可以了! 我想做的是一个远程控制舵机运转,把Arduino单片机上的esp8266设置为一个UDP(由于UDP是平等的不存在主从的区别) 刚开始的想法是串口接收到指令然后舵机运转,结果想要瘦串口的的数据的时候发现一直出现ERROR,直到会用函数.indexOf过后,只用indexof的作用为判断串口返回提供的字符串的索引,如果没有就返回-1 (切记,千万不要直接打印串口收到的字符!!!!!!来调试) 这样我们判断串口中是否出现了预定的指令就可以这样写监听函数 对于AT指令编程的esp8266来说,UDP TCP 服务端接收数据的监听函数都应该这样写。 void listenSerial() { while (Serial.available() > 0) { indate += char(Serial.read()); delay(2); if (Serial.available() <= 0) { //Serial.print(indate); } } //读取电脑传来的数据 if (indate.length() > 0) { val = indate; //将indate暂存到val中 //找出数据位置 int loc = val.indexOf("open"); if (loc > 0) { Serial.println("------"); } } indate = ""; //清空indate为下一次输入做准备 } 注意点二: eso8266模块连入wifi后是会自动分配一个IP地址的,我们使用之前最好先用u***-ttl连接esp8266查看所分配到的IP地址,然后 Serial.println(“AT+CIPSTART=“UDP”,”" + IP + “”,6000,5000"); 不要直接就用本机地址,我前面就是一直用本机地址,导致用专门的esp8266调试工具 调试半天也调试不通。 这里附上UDP接收指令并判断的代码,这里的指令为open,如果能够收到并判断指令的话,就可以做很多的远程控制的例子了: #define SSID "你家的WIFI名" #define PASS "你家的WIFI密码" String IP = "192.168.31.70"; //这个地址为esp8266被分配到的IP地址 String indate = ""; String val = ""; void setup() { Serial.begin(115200); delay(300); Serial.println("AT"); delay(500); if (Serial.find("OK")) { Serial.println("RECEIVED: OK"); connectWiFi(); connectUdp(); } } void loop() { listenSerial(); delay(300); } void listenSerial() { while (Serial.available() > 0) { indate += char(Serial.read()); delay(2); if (Serial.available() <= 0) { //Serial.print(indate); } } //读取电脑传来的数据 if (indate.length() > 0) { val = indate; //将indate暂存到val中 //找出数据位置 int loc = val.indexOf("open"); if (loc > 0) { Serial.println("------"); } } indate = ""; //清空indate为下一次输入做准备 } boolean connectWiFi() { // 连接到Wifi Serial.println("AT+CWMODE=1"); delay(2000); String cmd = "AT+CWJAP=""; cmd += SSID; cmd += "",""; cmd += PASS; cmd += """; Serial.println(cmd); delay(10000); if (Serial.find("OK")) Serial.println("RECEIVED: OK"); else { Serial.println("RECEIVED: Error"); return false; } cmd = "AT+CIPMUX=0"; Serial.println(cmd); if ( Serial.find( "Error") ) { Serial.print( "RECEIVED: Error" ); return false; } else Serial.println("RECEIVED: OK"); } bool connectUdp() { Serial.println("AT+CIPSTART="UDP","" + IP + "",6000,5000"); delay(1000); if (Serial.find("OK")) { Serial.println("RECEIVED: OK"); return true; } else { Serial.println("RECEIVED: Error"); return false; } } |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 05:37 , Processed in 1.092583 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号