失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 51UWB单片机连接ESP8266实现Wifi接收串口数据

51UWB单片机连接ESP8266实现Wifi接收串口数据

时间:2022-05-10 05:04:18

相关推荐

51UWB单片机连接ESP8266实现Wifi接收串口数据

UWB定位需要电脑读取UWB基站的串口数据来读取距离信息,用wifi连接可以实现远程接收串口数据方便连接。这里记录一下如何让51UWB单片机接入WiFi模块ESP8266。

前置条件:

单片机完成基站(RX)、标签(TX)程序的烧录(参考官方用户手册)

ESP8266模块完成AT指令集的烧录,可以通过串口用AT指令对其进行控制

开始!

ESP8266接入串口(这边用的是ESP8266-NodeMCU,可以直接通过安卓线连入电脑的USB口),在设备管理器中查看端口号,打开串口调试工具(用的是XCOM)连接该端口号。

按RST复位ESP8266,如果串口有输出初始化信息,说明连接成功,接下来可以用AT指令对其进行操作

模块配置为Station模式:AT+CWMODE=1

这时ESP8266可以作为TCP客户端,电脑作为TCP服务端进行通讯,之后可以进行透传,将串口数据通过WIFI传至电脑。

扫描WIFI信息:AT+CWLAP

选择要连接的网络(这里选择手机热点):AT+CWJAP="SSID","password"

设置多连接模式:AT+CIPMUX=1

打开cmd,输入ipconfig查看此时电脑接入WiFi的ip地址:

设置上电自动透传:

AT+SAVETRANSLINK=1,"192.168.221.179",8080,"TCP"

需关闭防火墙与虚拟机,不然连接可能会出现ERRORCLOSED。可参考:

/rong81590509/article/details/76133002

/yottian/article/details/122916280

出现OK则配置完成,断开端口,拔出串口线/USB线。

将ESP8266接入UWB基站串口(接入1号基站即可)

引脚如下:

给基站上电(插入充电宝即可),并打开其余基站与标签,这里开了三个基站与一个标签作单标签定位测试。

开启之后基站的串口即可不断接收到标签到三个基站的距离数据,下面要做的就是将这些串口的数据传到电脑。

打开网络调试助手测试连接情况(这里用XNET),设置协议为TCP Server,本机IP为192.168.221.179,端口8080,点击连接。

如果能接收到数据(一堆乱码),说明ESP8266与电脑的TCP通信没问题,剩下就是把这些数据解析出来了。

如果没收到数据再检查ESP8266的配置情况。

断开XNET的连接,利用python脚本开启TCP服务端并解析数据。

import socketimport threading # 多线程# TCP IP与端口号LOCAL_IP = "192.168.221.179"PORT = 8080def dispose_client_request(tcp_client_1, tcp_client_address):# 循环接收和发送消息while True:recv_data = tcp_client_1.recv(16)# 有消息就回复数据,如果消息长度为0表示客户端下线了if recv_data:recv_data = bytes(recv_data)decode(data=recv_data)else:print("%s 客户端下线了..." % tcp_client_address[1])tcp_client_1.close()breakdef decode(data):# 根据UWB传输协议进行解码if len(data) != 16:print('error len data')return#print(data[4])tag_id = data[3]dis0 = (data[6] + data[7]*256)/100dis1 = (data[8] + data[9]*256)/100dis2 = (data[10] + data[11]*256)/100if __name__ == '__main__':fig = plt.figure()# 创建服务端套接字对象tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 端口复用tcp_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)# 绑定端口tcp_server.bind((LOCAL_IP, PORT))# 设置监听tcp_server.listen(128)# 建立TCP连接tcp_client, tcp_client_address = tcp_server.accept()print ('connected from:', tcp_client_address)socks = tcp_clientthd = threading.Thread(target=dispose_client_request, args=(tcp_client, tcp_client_address))thd.setDaemon(True)thd.start()

decode函数将target_ID、距离等信息提取出来之后,后面就可以进行自己的编程(定位算法、可视化等)啦

如果觉得《51UWB单片机连接ESP8266实现Wifi接收串口数据》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。