5579| 4
|
[教程] 手机点亮掌控板RGB灯 |
本帖最后由 szjuliet 于 2020-5-14 16:13 编辑 本文在技术上延续上一个帖子,仍然通过wifi方式与掌控板连接,向掌控板发送数据,通过切片提取数据并控制板载RGB灯。 app界面: 在App Inventor中,会有9个完全一样的文本输入框,它们具有完全一样的属性,我们不需要在组件设计中去一个个的设置,而是到逻辑设计中使用任意组件的方式来进行属性设置,极大提高编程效率。 1. App Inventor程序编写
第1个水平布局摆放IP地址输入框和一个确认按钮; 第2个水平布局摆放红色图像和3个RGB值文本输入框; 第3个水平布局摆放绿色图像和3个RGB值文本输入框; 第4个水平布局摆放蓝色图像和3个RGB值文本输入框; 最下方的按钮用于发送数据给掌控板。除此之外还需要一个web客户端用于与掌控板通信。 9个RGB的文本输入框无需进行设置,因此在App Inventor界面中看起来显示不完整。但是程序运行后就会按照程序设置的属性来显示。
初始化变量ip(掌控板的IP地址) 初始化颜色列表为空列表 初始化掌控板访问地址 屏幕初始化时,将9个颜色输入框组件加入到变量colorList,并对其设置组件属性: 提示内容:0~255 仅限数字:真 宽度:充满 设置掌控板的IP地址 点击发送按钮后,将文本输入框中内容发送到掌控板,并执行GET请求 2. 掌控板程序编写 [mw_shl_code=python,false]import socket from mpython import * port=6832 # TCP服务端的端口,range0~65535 listenSocket=None oled.fill(0) mywifi=wifi() # 创建wifi类 rgb[0] = (0,0,0) rgb[1] = (0,0,0) rgb[2] = (0,0,0) rgb.write() # 捕获异常,如果在"try" 代码块中意外中断,则停止关闭套接字 try: mywifi.connectWiFi("one2free","87654321") # WiFi连接,设置ssid 和password # mywifi.enable_APWiFi("wifi_name",13) # 还可以开启AP模式,自建wifi网络 ip= mywifi.sta.ifconfig()[0] # 获取本机IP地址 listenSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建socket,不给定参数默认为TCP通讯方式 listenSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 设置套接字属性参数 listenSocket.bind((ip,port)) # 绑定ip和端口 listenSocket.listen(3) # 开始监听并设置最大连接数 print ('tcp waiting...') oled.DispChar("%s:%s" %(ip,port),0,0) # oled屏显示本机服务端ip和端口 oled.DispChar('accepting.....',0,16) oled.show() while True: print("accepting.....") conn,addr = listenSocket.accept() # 阻塞,等待客户端的请求连接,如果有新的客户端来连接服務器,那麼会返回一个新的套接字专门为这个客户端服务 print(addr,"connected") while True: data = conn.recv(1024) # 接收对方发送过来的数据,读取字节设为1024字节 if(len(data) == 0): print("close socket") conn.close() # 如果接收数据为0字节时,关闭套接字 break data_utf=data.decode() # 接收到的字节流以utf8编码解码字符串 print(data_utf) data_cut = data_utf[4:] str1 = 'H' position = data_cut.index(str1) data_cut = data_cut[0:position] print(data_cut) command_set = data_cut.split('/') command_set = command_set[1:10] number = list(map(int, command_set)) print(command_set) print(number) oled.DispChar(data_utf,0,48) # 将接收到文本oled显示出来 oled.show() oled.fill_rect(0,48,128,16,0) # 局部清屏 conn.send(data) rgb[0]=(int(number[0]),int(number[1]),int(number[2])) rgb[1]=(int(number[3]),int(number[4]),int(number[5])) rgb[2]=(int(number[6]),int(number[7]),int(number[8])) rgb.write() # 当捕获异常,关闭套接字、网络 except: if(listenSocket): listenSocket.close() mywifi.disconnectWiFi()[/mw_shl_code] 3. 测试
4. 演示视频 http://v.qq.com/x/page/q08580f9zts.html |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed