手机点亮掌控板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. 掌控板程序编写
import socket
from mpython import *
port=6832 # TCP服务端的端口,range0~65535
listenSocket=None
oled.fill(0)
mywifi=wifi() # 创建wifi类
rgb = (0,0,0)
rgb = (0,0,0)
rgb = (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() # 获取本机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
str1 = 'H'
position = data_cut.index(str1)
data_cut = data_cut
print(data_cut)
command_set = data_cut.split('/')
command_set = command_set
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=(int(number),int(number),int(number))
rgb=(int(number),int(number),int(number))
rgb=(int(number),int(number),int(number))
rgb.write()
# 当捕获异常,关闭套接字、网络
except:
if(listenSocket):
listenSocket.close()
mywifi.disconnectWiFi()
3. 测试
[*]将掌控板接上电脑,点击端口号的“连接串口”
https://mc.dfrobot.com.cn/data/attachment/forum/201904/01/092200lx930qa7ikxx8p5q.png
[*]连接成功后会显示“断开连接”,点击“调试代码”,程序开始运行
https://mc.dfrobot.com.cn/data/attachment/forum/201904/01/092027vtu76sa77saa692s.png
[*]REPL首先显示 connecting to network... ,如果成功连接到wifi,则显示掌控板的网络配置:IP地址,子网掩码,网关和DNS,并显示tcp waiting…和accepting……,说明掌控板已准备好接收数据。
[*]手机通过AI伴侣连接电脑,此时还没有设置IP地址,“将颜色传给掌控板”按钮为禁用状态
[*]输入IP地址,点击确认,屏幕底部的按钮变为可用,同时显示提示信息告诉用户已经设置好。
[*]此时掌控板OLED上显示GET到的颜色值,同时点亮了RGB灯
[*]在REPL窗口,可以看到接收到的数据以及转换为数字后的数据。
4. 演示视频
http://v.qq.com/x/page/q08580f9zts.html
非常棒的教程啊。{:5_122:} 第一次到这里来,向陈老师学习啦
rzyzzxw 发表于 2019-4-9 09:17
非常棒的教程啊。
{:5_168:} 410359375 发表于 2019-4-9 11:14
第一次到这里来,向陈老师学习啦
欢迎欢迎,一起学习交流{:5_148:}
页:
[1]