MicroPython ESP32 入网和TCP数据发送通讯示例

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MicroPython ESP32 入网和TCP数据发送通讯示例相关的知识,希望对你有一定的参考价值。

【MicroPython ESP32】 入网和TCP数据发送通讯示例


  • 本示例基于Thonny平台开发。

通过TCP数据发送到指定的服务端,相当于数据实时进行上报。业务代码需要自行添加和完善。

  • 演示

功能模块简介

  • 入网部分
# 入网部分
def wlan_connect(ssid,password):
        
    if not wlan.isconnected():
      print('connecting to network...')
      wlan.connect(ssid,password)

    while not wlan.isconnected():
    #未连接到WIFI时LED闪烁提示
        WIFI_LED.value(1)
        time.sleep_ms(300)
        WIFI_LED.value(0)
        time.sleep_ms(300)

    #超时判断,15秒没连接成功判定为超时
        start_time=time.time()#记录时间做超时判断
        if time.time()-start_time > 15 :
          print('WIFI Connected Timeout!')
          break

    if wlan.isconnected():#如果WIFI连接上,就把网络的各种参数输出在OLED屏幕中
       pwm2.duty(1000)
       print('network information:', wlan.ifconfig())
       sync_ntp()
       send_data(logger('OK'))
  • 建立TCP连接
# 建立TCP连接,发送数据
def send_data(data):
    ip = '192.168.0.113'
    port = 10010
    if wlan.isconnected():
       server = socket.socket()
       server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
       server.connect((ip,port))
       server.send(data.encode('uft-8'))
       server.close()
  • 获取NTP网络时间
def sync_ntp():#联网获取时间
    ntptime.NTP_DELTA = 3155644800 #UTC+8偏移秒数
    ntptime.host = 'ntp1.aliyun.com'
    ntptime.settime()
  • 打印日志信息
def logger(msg):#打印本地日志,生成发送网络时间日志
    datetime= rtc.datetime()
    print("[%02d-%02d-%02d %02d:%02d:%02d] %s" % ((localtime()[:-2]) + (msg,)))
    return str(datetime[0])+'-'+ str(datetime[1])+'-'+str(datetime[2])+' '+str(datetime[4])+\\
            ':'+str(datetime[5])+':'+str(datetime[6])+ '//' + msg
  • 任务函数
# 任务函数
def Task(t):
    global count
    count += 1    
    led.value(led.value() ^ 1)
    logger('开始Task')
    time.sleep(5) #供水时间,单位为秒
    logger('结束Task')    
    
    try:
#     send_data(f'logger('succeed'),count:count')
        send_data(',count:'.format(logger('succeed'),count))
    except NameError:
         logger('发送失败')

引入的模块

from time import localtime
import socket 
import time
import network
from machine import Pin,PWM,I2C,Timer,RTC
import ntptime

完整示例代码

from time import localtime
import socket 
import time
import network
from machine import Pin,PWM,I2C,Timer,RTC
import ntptime

wlan = network.WLAN(network.STA_IF) #STA模式
wlan.active(True)
rtc = RTC()
count = 0
WIFI_LED=Pin(2, Pin.OUT) #初始化WIFI指示灯
pwm2=PWM(WIFI_LED,freq=1000)
led = Pin(22,Pin.OUT)
ssid,password = 'MERCURY_D268G', 'pba5ayzk' 


def wlan_connect(ssid,password):
        
    if not wlan.isconnected():
      print('connecting to network...')
      wlan.connect(ssid,password)

    while not wlan.isconnected():
    #未连接到WIFI时LED闪烁提示
        WIFI_LED.value(1)
        time.sleep_ms(300)
        WIFI_LED.value(0)
        time.sleep_ms(300)

    #超时判断,15秒没连接成功判定为超时
        start_time=time.time()#记录时间做超时判断
        if time.time()-start_time > 15 :
          print('WIFI Connected Timeout!')
          break

    if wlan.isconnected():#如果WIFI连接上,就把网络的各种参数输出在OLED屏幕中
       pwm2.duty(1000)
       print('network information:', wlan.ifconfig())
       sync_ntp()
       send_data(logger('OK'))


def send_data(data):
    ip = '192.168.0.113'
    port = 10010
    if wlan.isconnected():
       server = socket.socket()
       server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
       server.connect((ip,port))
       server.send(data.encode('uft-8'))
       server.close()

def sync_ntp():#联网获取时间
    ntptime.NTP_DELTA = 3155644800 #UTC+8偏移秒数
    ntptime.host = 'ntp1.aliyun.com'
    ntptime.settime()
    

  
def logger(msg):#打印本地日志,生成发送网络时间日志
    datetime= rtc.datetime()
    print("[%02d-%02d-%02d %02d:%02d:%02d] %s" % ((localtime()[:-2]) + (msg,)))
    return str(datetime[0])+'-'+ str(datetime[1])+'-'+str(datetime[2])+' '+str(datetime[4])+\\
            ':'+str(datetime[5])+':'+str(datetime[6])+ '//' + msg



def Task(t):
    global count
    count += 1    
    led.value(led.value() ^ 1)
    logger('开始Task')
    time.sleep(5) #供水时间,单位为秒
    logger('结束Task')
    
    
    try:
#     send_data(f'logger('succeed'),count:count')
        send_data(',count:'.format(logger('succeed'),count))
    except NameError:
         logger('发送失败')
         
wlan_connect(ssid,password)
while True:  
    logger('开始')
    Task(1)

以上是关于MicroPython ESP32 入网和TCP数据发送通讯示例的主要内容,如果未能解决你的问题,请参考以下文章

MicroPython ESP32 入网和udp数据接收通讯示例

MicroPython ESP32 手动入网配置调试过程

MicroPython ESP32手动配网和wifi信息保存示例

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

MicroPython ESP8266配网示例以及network模块功能介绍

ESP32 MicroPython 调整分区大小