ESP32(MicroPython) 对socket通信的几项测试

文章讲述了在ESP32上使用MicroPython进行socket通信的问题,发现该方法适合字符串收发但无法满足设备控制需求。作者测试了连接WIFI和与服务器交互的代码,指出MicroPython不支持数字解码,认为常规socket通信不是物联网设备控制的理想方案,建议使用网页或物联网工具。
摘要由CSDN通过智能技术生成

MicroPython有socket通信功能,但实测得出仅适用于字符串收发,不适合对设备进行控制。以下是测试的具体情况。

ESP32上直接使用例程,要填写wifi名称再运行。实际使用时不能上电启动,原因不明确。

#导入Pin模块
from machine import Pin
import time
import network
import usocket

#定义LED控制对象
led1=Pin(15,Pin.OUT)

#路由器WIFI账号和密码
ssid=" "
password=" "

#服务器地址和端口
dest_ip="192.168.1.100"
dest_port=10000

#WIFI连接
def wifi_connect():
    wlan=network.WLAN(network.STA_IF)  #STA模式
    wlan.active(True)  #激活
    start_time=time.time()  #记录时间做超时判断
    
    if not wlan.isconnected():
        print("conneting to network...")
        wlan.connect(ssid,password)  #输入WIFI账号和密码
        
        while not wlan.isconnected():
            led1.value(1)
            time.sleep_ms(300)
            led1.value(0)
            time.sleep_ms(300)
            
            #超时判断,15 秒没连接成功判定为超时
            if time.time()-start_time>15:
                print("WIFI Connect Timeout!")
                break
        return False
    
    else:
        led1.value(0)
        print("network information:", wlan.ifconfig())
        return True


#程序入口
if __name__=="__main__":
    
    if wifi_connect():
        socket=usocket.socket()  #创建socket连接
        addr=(dest_ip,dest_port)  #服务器IP地址和端口
        socket.connect(addr)
        socket.send("Hello PRECHIN")
        
        while True:
            text=socket.recv(128)  #单次最多接收128字节
            if text==None:
                pass
            else:
                print(text)
                socket.send("I get:"+text.decode("utf-8"))
            time.sleep_ms(300)

电脑上可以用网络调试工具,或者用下面的python程序。由于上面的ESP32程序上电不能正常启动,需要在电脑上启动,而IDE上不能同时使用两个解释器,因此需要在文件所在目录打开命令行,使用 python+空格+文件名 运行程序。

#!/usr/bin/python3
# 文件名:server.py

# 导入 socket、sys 模块
import socket
import sys
import time
# 创建 socket 对象
serversocket = socket.socket(
            socket.AF_INET, socket.SOCK_STREAM)

# 获取本地主机名
host = socket.gethostname()

port = 10000

# 绑定端口号
serversocket.bind((host, port))

# 设置最大连接数,超过后排队
serversocket.listen(5)

while True:
    # 建立客户端连接
    clientsocket,addr = serversocket.accept()      
    print("连接地址: %s" % str(addr))
    i=1
    while True:
        msg='welcome!'+ "\r\n"
        clientsocket.send(msg.encode('utf-8'))
        text = clientsocket.recv(1024)
        if text==None:
            pass
        else:
            print(text)
        time.sleep(1)

实际测试时能正常收发数据。

如果要通过socket通信操作ESP32,需要判断接收的数据的内容。本人尝试直接判断字符串内容,但不能正常运行。又测试了编码数字进行发送,测试结果是电脑上能正常发布,但MicroPython不支持对数字进行解码的功能。

总的来说,通过常规的socket通信实现物联网不是一种好方案。如果要在局域网控制设备,可以选择制作网页或使用物联网工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路易斯720

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值