ESP32(MicroPython) LVGL Socket通信收发消息

news/2024/11/23 1:48:07/

本程序实现了通过Socket通信收发消息。程序开始时顶部会显示connecting...,连接路由器后显示connected并展开键盘。接收的消息会显示在屏幕顶部,发送消息通过键盘输入并按回车。实际测试时,可能由于实时性问题,接收消息失败率较高,发送消息基本发不出,因此采用try...except进行处理,在收发失败时跳过以确保程序持续运行。

代码如下

import lvgl as lv
import time
from espidf import VSPI_HOST
from ili9XXX import ili9341
from xpt2046 import xpt2046
import fs_driver
from machine import Pin
import network
import usocketi=0
# ------------------------------ 屏幕初始化操作 --start------------------------
# 屏幕宽高
WIDTH = 240
HEIGHT = 320# 创建显示屏对象
disp = ili9341(miso=19, mosi=23, clk=18, cs=5, dc=26, rst=27, power=14, backlight=-1, backlight_on=0, power_on=0, rot=0x80,spihost=VSPI_HOST, mhz=60, factor=16, hybrid=True, width=WIDTH, height=HEIGHT,invert=False, double_buffer=True, half_duplex=False, initialize=True)# 创建触摸屏对象
touch = xpt2046(cs=25, spihost=VSPI_HOST, mosi=-1, miso=-1, clk=-1, cal_y0 = 423, cal_y1=3948)
# ------------------------------ 屏幕初始化操作 --stop------------------------# 1. 创建显示screen对象。将需要显示的组件添加到这个screen才能显示
scr = lv.obj()  # scr====> screen 屏幕
fs_drv = lv.fs_drv_t()
fs_driver.fs_register(fs_drv, 'S')
scr = lv.scr_act()
scr.clean()#路由器WIFI账号和密码
ssid=" "
password=" "#服务器地址和端口
dest_ip="192.168.1.100"
dest_port=10000#WIFI连接
def wifi_connect():wlan=network.WLAN(network.STA_IF)  #STA模式wlan.active(True)  #激活start_time=time.time()  #记录时间做超时判断if not wlan.isconnected():print("conneting to network...")wlan.connect(ssid,password)  #输入WIFI账号和密码while not wlan.isconnected():#超时判断,15 秒没连接成功判定为超时if time.time()-start_time>15:print("WIFI Connect Timeout!")breakreturn Falseelse:print("network information:", wlan.ifconfig())return True# 2. 封装要显示的组件
class MyWidget():def __init__(self, scr):# 创建文本框ta = lv.textarea(scr)ta.set_one_line(False)  # 关闭1行模式ta.set_size(240, 60)  # 设置宽高ta.align(lv.ALIGN.TOP_MID, 0, 30)  # 设置位置ta.add_event_cb(lambda e: self.textarea_event_handler(e, ta), lv.EVENT.READY, None)  # 添加回调函数ta.add_state(lv.STATE.FOCUSED)   # 设置光标# 定义数字键盘要显示的内容btnm_map = ["a", "b", "c","d", "e", "f", "\n","g", "h", "i","j", "k", "l", "\n","m", "n", "o","p", "q", "r", "\n","s", "t", "u","v", "w", "x", "\n","y", "z", "1","2", "3", "4", "\n","5", "6", "7","8", "9", "0", "\n",",", ".", "?","!",lv.SYMBOL.BACKSPACE, lv.SYMBOL.NEW_LINE, ""]# 按钮矩阵btnm = lv.btnmatrix(scr)btnm.set_size(240, 230)  # 设置宽高btnm.align(lv.ALIGN.BOTTOM_MID, 0, 0)  # 设置位置btnm.add_event_cb(lambda e: self.btnm_event_handler(e, ta), lv.EVENT.VALUE_CHANGED, None)btnm.clear_flag(lv.obj.FLAG.CLICK_FOCUSABLE)  # 设置为非活跃,即文本框中的光标一直聚焦btnm.set_map(btnm_map)  # 设置要显示的内容(数字键盘)# 设置有源蜂鸣器引脚self.p15 = Pin(15, Pin.OUT)self.p15.value(1)  # 不响def textarea_event_handler(self, e, ta):try:socket.send(ta.get_text()) except:passdef btnm_event_handler(self, e, ta):obj = e.get_target()txt = obj.get_btn_text(obj.get_selected_btn())  # 获取被点击的按钮的内容,例如数字3if txt == lv.SYMBOL.BACKSPACE:  # 如果是退格键,那么就删除1个字符ta.del_char()elif txt == lv.SYMBOL.NEW_LINE:  # 如果是回车键,那么就触发事件lv.event_send(ta, lv.EVENT.READY, None)elif txt:ta.add_text(txt)  # 如果不是回车键,那么就将当前数字显示到文本框btn = lv.btn(scr)  # 将当前按钮与screen对象进行关联
btn.set_size(240, 30)  # 设置按钮尺寸
btn.align(lv.ALIGN.TOP_MID,0,0)  # 置于屏幕顶部
label = lv.label(btn)  # 在按钮上创建一个标签Label,用来显示文字用
label.set_text("connecting...")  # 设置文字内容
label.center()  # 相对于父对象居中while i<10 :i+=1if wifi_connect():socket=usocket.socket()  #创建socket连接addr=(dest_ip,dest_port)  #服务器IP地址和端口socket.connect(addr)print("Connected")i=10      # 3. 创建要显示的组件
MyWidget(scr)
# 4. 显示screen对象中的内容
lv.scr_load(scr)
label.set_text('connected')
while True:try:text=socket.recv(128)  #单次最多接收128字节if text==None:passelse: text=text.decode("utf-8")label.set_text(text)   time.sleep_ms(300)except:pass


http://www.ppmy.cn/news/723901.html

相关文章

高性能计算 (HPC) 的发展趋势是什么?

随着科学、工程和商业领域对于大规模数据和复杂计算需求的不断增长&#xff0c;高性能计算&#xff08;HPC&#xff09;正成为推动技术进步和创新的关键力量。在未来&#xff0c;HPC将继续发展&#xff0c;以下是几个HPC领域的发展趋势&#xff1a; 更强大的硬件&#xff1a;高…

苹果8a1660是什么版本_苹果a1780是什么版本

展开全部 苹果a1780是iPhone 7。 iPhone 7是Apple(苹果公司)第10代手机&#xff0c;手机尺寸:138.3x67.1x7.1mm&#xff0c;支持IP67级防溅&#xff0c;防水&#xff0c;防尘。 在容量方面&#xff0c;iPhone7 取消了16GB机型&#xff0c;最62616964757a686964616fe59b9ee7ad94…

ChatGPT系统源码,全开源支持二开!

ChatGPT是开发的大语言模型之一&#xff0c;具备多领域知识&#xff0c;并且可以提供个性化、准确和有趣的答案&#xff0c;无论是在娱乐、教育还是工作中&#xff0c;都可以帮助我们解决问题、获取信息和提供建议。 技术架构 使用流行的技术栈PHP8、TypeScript、ThinkPHP6、…

逻辑像素与物理像素

物理像素 设备屏幕实际拥有的像素点。比如一个图片,细分最小单位就是像素,也就是说图片是由许多的像素构成。 一个设备生产出来,他们的像素就已经确定了,iphone5的分辨率是640*1136px,代表屏幕的宽是640px,高是1136px。 逻辑像素 也叫“设备独立像素”(Device Independe…

苹果ios8_苹果IOS平台年度五佳免费单机手游!免费也有高质量游戏!

本文带来2018年IOS平台免费榜五佳游戏。因为考虑很多朋友没有外区苹果账号&#xff0c;所以只推荐可以在国区商店下载的游戏&#xff01;像狂野飙车9、暗影之枪这种大作也只能排除在外了&#xff01;当然这里说的免费是下载免费&#xff0c;部分游戏里面还是会有内购~ 游戏名称…

交换排序--冒泡排序和快速排序

交换&#xff0c;是指根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置 一&#xff0c;冒泡排序 1.基本思想&#xff1a;从后往前&#xff08;或从前往后&#xff09;两两比较相邻元素的值&#xff0c;若为逆序&#xff08;A[i-1] > A[i]&#xff09;&a…

OpenVRLoader 与UnityXR Interaction ToolKit不兼容

1、游戏的VR设备监听与输入都是基于UnityXR,但是当接入OpenVRLoader 时无法正常通过Openvr_xr_plugin去获取设备的输入输出。 2、Openxr 和OpenVRLoader同时打开也还是会没有输入信息。 3、我们需要修改com.unity.xr.interaction.toolkit插件代码,不能直接用packmanage的将插…

联想微型计算机怎么光盘启动,联想笔记本电脑win10怎么设置光盘启动

由于笔记本的bios和台式机有一定区别&#xff0c;很多使用笔记本的用户在重装系统时不知道怎么设置光驱启动。今天&#xff0c;小编就以主流的联想笔记本为例给大家讲解下光驱启动的设置方法。 方法一 1 启动计算机&#xff0c;并按住DEL键(或者F2键)不放&#xff0c;直到出现B…