查看: 2041|回复: 4

[教程] 手机点亮掌控板RGB灯

[复制链接]
本帖最后由 szjuliet 于 2020-5-14 16:13 编辑

本文在技术上延续上一个帖子,仍然通过wifi方式与掌控板连接,向掌控板发送数据,通过切片提取数据并控制板载RGB灯。
app界面:
截图201904082157554675.png

在App Inventor中,会有9个完全一样的文本输入框,它们具有完全一样的属性,我们不需要在组件设计中去一个个的设置,而是到逻辑设计中使用任意组件的方式来进行属性设置,极大提高编程效率。


1. App Inventor程序编写

  • 组件设计

截图201904082200231058.png

第1个水平布局摆放IP地址输入框和一个确认按钮;
第2个水平布局摆放红色图像和3个RGB值文本输入框;
第3个水平布局摆放绿色图像和3个RGB值文本输入框;
第4个水平布局摆放蓝色图像和3个RGB值文本输入框;
最下方的按钮用于发送数据给掌控板。除此之外还需要一个web客户端用于与掌控板通信。

9个RGB的文本输入框无需进行设置,因此在App Inventor界面中看起来显示不完整。但是程序运行后就会按照程序设置的属性来显示。

  • 逻辑设计:


初始化变量ip(掌控板的IP地址)
初始化颜色列表为空列表
初始化掌控板访问地址

截图201904082206512930.png

屏幕初始化时,将9个颜色输入框组件加入到变量colorList,并对其设置组件属性:
提示内容:0~255
仅限数字:真
宽度:充满

截图201904082208364745.png

设置掌控板的IP地址

截图201904082210033923.png

点击发送按钮后,将文本输入框中内容发送到掌控板,并执行GET请求
截图201904082211599370.png

2. 掌控板程序编写
[Python] 纯文本查看 复制代码
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()


3. 测试



  • 将掌控板接上电脑,点击端口号的“连接串口”




  • 连接成功后会显示“断开连接”,点击“调试代码”,程序开始运行



  • REPL首先显示 connecting to network... ,如果成功连接到wifi,则显示掌控板的网络配置:IP地址,子网掩码,网关和DNS,并显示tcp waiting…和accepting……,说明掌控板已准备好接收数据。

截图201904082231491075.png



截图201904082232174027.png

  • 手机通过AI伴侣连接电脑,此时还没有设置IP地址,“将颜色传给掌控板”按钮为禁用状态

截图201904082232475361.png

  • 输入IP地址,点击确认,屏幕底部的按钮变为可用,同时显示提示信息告诉用户已经设置好。

截图201904082236392309.png

  • 此时掌控板OLED上显示GET到的颜色值,同时点亮了RGB灯

截图201904082240241440.png

  • 在REPL窗口,可以看到接收到的数据以及转换为数字后的数据。

截图201904082241425500.png

4. 演示视频

http://v.qq.com/x/page/q08580f9zts.html


截图201904082235517637.png

rzyzzxw  版主

发表于 2019-4-9 09:17:32

非常棒的教程啊。
回复

使用道具 举报

410359375  见习技师

发表于 2019-4-9 11:14:22

第一次到这里来,向陈老师学习啦
回复

使用道具 举报

szjuliet  版主
 楼主|

发表于 2019-4-9 11:45:48

rzyzzxw 发表于 2019-4-9 09:17
非常棒的教程啊。

回复

使用道具 举报

szjuliet  版主
 楼主|

发表于 2019-4-9 11:47:22

410359375 发表于 2019-4-9 11:14
第一次到这里来,向陈老师学习啦

欢迎欢迎,一起学习交流
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2020 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail