【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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值