【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)