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手动配网和wifi信息保存示例
MicroPython ESP32 UDP和TCP数据收发通讯综合实例