Micropython学习交流群 学习QQ群:786510434 提供多种固件下载和学习交流。

Micropython-扇贝物联 QQ群:31324057 扇贝物联是一个让你与智能设备沟通更方便的物联网云平台

Micropython学习交流群 学习QQ群:468985481 学习交流ESP8266、ESP32、ESP8285、wifi模块开发交流、物联网。

Micropython老哥俩的IT农场分享QQ群:929132891 为喜欢科创制作的小白们分享一些自制的计算机软硬件免费公益课程,由两位多年从事IT研发的中年大叔发起。

Micropython ESP频道

MicroPython ESP32 UDP和TCP数据收发通讯综合实例


MicroPython ESP32 UDP和TCP数据收发通讯综合实例


本示例基于Thonny平台开发。

所需工具网络调试助手

UDP和TCP4种通讯模式

MicroPython ESP32设备作为TCP客户端

MicroPython ESP32设备作为TCP服务端

MicroPython ESP32设备作为UDP客户端

MicroPython ESP32设备作为UDP服务端

根据不同的通讯模式启用对应的代码


if __name__ == '__main__':    

#     tcpServer()# TCP服务端

      tcpClient()# TCP客户端

#     UDPServer()#UDP服务端

#     UDPClient()#UDP客户端

'''
-----------------------------------------------------地址簇
usocket.AF_INET             = 2 - TCP / IP - IPv4
usocket.AF_INET6            = 10 - TCP / IP - IPv6
-----------------------------------------------------套接字类型
usocket.SOCK_STREAM         = 1 - TCP流
usocket.SOCK_DGRAM          = 2 - UDP数据报
usocket.SOCK_RAW            = 3 - 原始套接字
usocket.SO_REUSEADDR        = 4 - socket可重用
-----------------------------------------------------套接字选项级别
usocket.SOL_SOCKET = 4095
-----------------------------------------------------函数
'''
import socket
import network
import time


host="192.168.0.113"# TCP/UDP客户端IP

port = 10010 #端口号
SSID="MERCURY_D268G"
PASSWORD="pba5ayzk"
wlan=None
s=None
#-----------------------------------------------------连接WIFI
def connectWifi(ssid,passwd):
  global wlan
  wlan=network.WLAN(network.STA_IF)                 #create a wlan object
  wlan.active(True)                                 #Activate the network interface
  wlan.disconnect()                                 #Disconnect the last connected WiFi
  wlan.connect(ssid,passwd)                         #connect wifi
  
  while(wlan.ifconfig()[0]=='0.0.0.0'):
    time.sleep(1)
  return True
#-----------------------------------------------------TCP消息回调函数
def tlc_msg(msg):
    print(msg)
#-----------------------------------------------------TCP服务器
def tcpServer():
    try:
      connectWifi(SSID,PASSWORD)                #连接WIFI
      ip=wlan.ifconfig()[0]                     #获取本地IP
      listenSocket = socket.socket()            #创建TCP
      listenSocket.bind((ip,port))              #绑定本地IP以及端口
      listenSocket.listen(1)                    #最大连接数
      listenSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)    #配置TCP选项
      print('Wifi connection succeeded')
      print('network config:', ip)
      while True:
        print("accepting.....")
        conn,addr = listenSocket.accept()       #用户进入获取用户组
        print(addr,"connected")
    
        while True:
          data = conn.recv(1024)                #读取用户消息
          if(len(data) == 0):
            print("close socket")
            conn.close()                        #空消息关闭用户连接
            break
          print(data)
          ret = conn.send(data)                 #发送接收到的数据给发送者
    except:
      if(listenSocket):
        listenSocket.close()
      wlan.disconnect()
      wlan.active(False)
#-----------------------------------------------------TCP客户端
def tcpClient():
    
    try:
      connectWifi(SSID,PASSWORD)                #连接WIFI
      ip=wlan.ifconfig()[0]                     #获取本地IP
      s = socket.socket()            #创建TCP
      print('network config:', ip)
      s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)    #配置TCP选项
      s.connect((host,port))                    #连接指定TCP服务器
      s.send("hello ESP32,I am TCP Client")   #连接成功向服务器发送消息
      while True:
        data = s.recv(1024)                               #每次接收1024字节
        if(len(data) == 0):                               #如果收到空消息关闭连接
          print("close socket")
          s.close()
          break
        print(data)
        ret = s.send(data)
    except:
      if(listenSocket):
        listenSocket.close()
      wlan.disconnect()
      wlan.active(False)
#-----------------------------------------------------UDP服务器
def UDPServer():
    try:
      if(connectWifi(SSID, PASSWORD) == True):              #判断WIFI是否连接
        s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  #创建socket对象 UDP模式
        s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)  #配置socket对象
        ip=wlan.ifconfig()[0]                               #获取本地IP
        s.bind((ip,port))                                   #绑定本地IP 指定端口
        print('network config:', ip)
        print('ESP32 UDPServer Start waiting...')
        while True:
          data,addr=s.recvfrom(1024)                        #每次接收1024字节集
          print('received:',data,'from',addr)
          s.sendto(data,addr)                               #发送接收到的数据给发送者
    except:
      if (s):
        s.close()
      wlan.disconnect()
      wlan.active(False)
#-----------------------------------------------------UDP客户端
def UDPClient():
    try:
      if(connectWifi(SSID,PASSWORD) == True):                   #判断WIFI是否连接
        ip=wlan.ifconfig()[0]
        print('network config:',ip)
        s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)      ##创建socket对象 UDP模式
        s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)   #配置socket对象
        while True:
          s.sendto(b'From ESP32 UDP Sendto \r\n',(host,port))            #直接发送消息给指定IP端口
          time.sleep(1)
    except:
      if (s):
        s.close()
      wlan.disconnect()
      wlan.active(False)

if __name__ == '__main__':
    
#     tcpServer()# TCP服务端
      tcpClient()# TCP客户端
#     UDPServer()#UDP服务端
#     UDPClient()#UDP客户端

来自:https://blog.csdn.net/weixin_42880082/article/details/126556071


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 ESP56.com All Rights Reserved

执行时间: 0.0090689659118652 seconds