最近一个项目需要使用wifi模块进行图片的传输,传输协议采用tcp协议,使用模块为经典的ESP8266,在此和大家分享一下在OPENMV中使用AT指令集遇到的一些问题:
1:使用AT指令集一个基本常识就是一定要在AT指令后面加入回车换行符,在java中为string类型的“\r\n”,在C中为uint8_t类型的0x0D,0x0A,在openmv中我的方式是使用一个bytearray存储两个字符变量
2:返回帧一定要查看,因为在openMV中的串口是采用uart.any()方式进行数据的接收判断
该函数只要有数据在等待就会调用成功,但是我们每次在串口发送一次AT指令即意味着数据在串口等待发送,所以在AT指令调用的间隙,需要调用该函数进行数据的取出和读取,一是缓解串口的发送压力,二是通过读取8266的返回数据,可以更好的把握模块的链接情况
3:发送间隙最好延时,在博主的项目中,8266的链接情况受wifi信号的制约,但是都不可避免的需要在at指令中延时,延时方法:调用time类 使用time.sleep()函数进行延时,这点在8266 UDP透传的时候也有介绍:
4:内存的及时回收
在python中变量并不是一块特定的内存,所以在使用完毕后尽量使用del()函数进行手动处理,在一次大的while循环中也应该通过内存回收命令gc.collect()进行处理优化。
最后附上一些新手容易遇见的问题:
- AT指令必须大写,每条AT指令后头加一个空格,代码中对应0x0d 0x0a,否则发什么回什么
- 连接tcp的时候使用串口助手自动找到IP地址,将其余的全部禁用即可
- 退出透传命令什么都不要加,就+++即可