ESP8266WIFI模块作为服务端与电脑进行TCP透传通信 ESP8266WIFI模块作为服务端与电脑由python进行辅助TCP透传通信
一、学习ESP8266的连线(与USB转TTL)和其基本指令,将其设置为服务端
1、ESP8266与USB转TTL模块的连线后跟电脑进行串口通信
1.1、ESP8266WIFI的连线
USB转TTL模块 ESP8266WIFI
5V ----- VCC
TXD ----- RXD
RXD ----- TXD
GND ----- GND
----- RST【复位(低电平有效),这里可不接】
----- IO_0【下载:低;运行:悬空或者高,这里可不接】
1.2、ESP8266WIFI通过串口与电脑通信
在电脑上打开串口i调试助手,这里用的是正点原子的串口调试助手,软件下载地址:
串口调试助手软件(ATK-XCOM) 版本:v3.0 — 正点原子资料下载中心 1.0.0 文档
打开调试助手,选择CH340的串口,波特率选择为115200(ESP8266WIFI的默认串口波特率):
1.3、认识ESP8266WIFI部分指令集
首先了解ESP8266指令集(这里只写一些将ESP8266配置通信的指令)
【注:以下指令除了+++以外,指令后面都要携带\r\n结尾】,在串口助手勾上发送新行就行(注意+++指令时要取消此勾)
AT【测试指令】
AT+RST【模块复位】
AT+CWMODE=1【1:Station 模式;2:SoftAP 模式;3:SoftAP+Station 模式】
AT+CIPMUX=1【将模块配置为多连接(即多个设备可连)】
AT+CWJAP="wifi名称","wifi密码"【将模块连接到该WIFI】
AT+CIPSTART="TCP","IPv4地址",端口号【将模块做为客户端,连接到该服务端】
AT+CIPMODE=1【开启透传】
AT+CIPSEND【开始传数据,会返回一个>说明可以传数据了】
AT+CIPSERVER=1,端口号 【1代表开始服务器模式】
AT+CIPSEND=0,30【对0号客户端开启数据传输,当积累的字符数量到达30个时一起发送到0号客户端,然后退出对0号客户端的数据传输】
+++【提前退出传输数据】
1.4、串口测试ESP8266WIFI
连接好模块之后打开在串口助手中打开串口:
依次输入测试指令:AT
返回OK说明连接成功了!
1.5、配置ESP8266WIFI为服务端
在此之前我将创建一个手机热点让电脑和ESP8266WIFI连接上该热点:
名称"Yc";密码:"6789012345"
电脑连接上该热点:
ESP8266WIFI连接上该热点,在串口助手中依次输入:
AT
AT+RST
AT+CWMODE=1
AT+CWJAP="Yc","6789012345"
AT+CIPMUX=1
AT+CIPSERVER=1,6000
AT+CIFSR
此时可多连接的服务端就创建好了,记住服务端的IP地址:"192.168.98.168"
和端口号:6000
到此对于模块服务端的配置已经完成了,下一步就是在电脑上的客户端连接并通信了。
二、在电脑上创建客户端通过串口与ESP8266WIFI模块通信
2.1、利用Python中的socket包写一个客户端与ESP8266WIFI模块进行TCP连接和通信
from socket import *
# 客户端
IP = '192.168.98.168'
PORT = 6000
DATA_LEN = 50
data_socket = socket(AF_INET, SOCK_STREAM)
print('开始连接')
data_socket.connect((IP, PORT))
print('Connected to server')
input_keyboard = str()
while input_keyboard != 'exit':
send_data = input('需要发送的数据:')
data_socket.send(send_data.encode('utf-8'))
receive_data = data_socket.recv(DATA_LEN).decode('utf-8')
print(f'收到的数据:{receive_data}')
print('服务端已关闭')
运行代码发送测试数据:
成功接收数据,现在由ESP8266WIFI模块发送数据:
首先发送指令(开始传输数据,由+++指令结束数据的传输)
AT+CIPSEND=0,30
至此实现了ESP8266与电脑的无线透传了,至于数据的处理在python上还是很好操作的,
然后就是我发现,每次ESP8266WIFI模块发出信息之后是都需要先AT+CIPSEND=0,30\r\t重新开启发送数据,提前退出测试用+++。
三、过程中遇到的问题
3.1、对于1.1的接线问题一开始用的是3.3v电压发现模块不正常工作于是换成了5v供电,原因可能是因为3.3v的电压不稳定吧,然后就是USB-TTL最好直接连接到电脑,尽量不要经过USB拓展坞或者延长线,我当时也遇到过这个问题com口检测突然有突然没的,直接电脑就没有这个问题了。
3.2、对于1.5小节,我本意不是将ESP8266作为服务端的,一开始想在电脑上建立服务端让8266作为客户端去连接的但是在连接电脑服务端时AT+CIPSTART="TCP","IPv4地址",端口号出现了ERROR CLOSED报错,在网上查了两个办法但是都没有解决:
1是:服务端的IP地址和8266的网段不一样,我更改后依旧报错
2是:关闭电脑的防火墙,我关闭后依旧没用
因此我就选择了8266作为服务端了,能传数据就行,变着法解决。
3.3,对于我为什么用python创建客户端呢,因为我一开始想用正点原子的ATK-XNET网络调试助手创建客户端的但是连不上,我想起我学过Python的socket可以建立客户端和服务端而且代码之前的还在,所以我就用的这个。
至此完成了与电脑的TCP通信,以上仅为个人学习的过程不涉及太难的东西,至于上面的问题如果大佬看到请各位大佬指教一下哈感谢。