查看: 3413|回复: 6

[教程] AppInventor与掌控板通过wifi通信

[复制链接]
本帖最后由 szjuliet 于 2019-4-2 12:57 编辑

App Inventor与掌控板的板载传感器的通信,如,光感,LED,蜂鸣,按钮等已经有了很好的解决方案:通过张路老师编写的tinywebio.py能够与掌控板上所有板载元器件进行通信,包括写入和读出。

我们这里所要讨论的是App Inventor与掌控板自由发送信息,这样做的好处是能够灵活的向掌控板发送信息(命令或参数),控制掌控板的程序运行,这样能够极大的扩充掌控板的输入。掌控板可以根据用户输入的命令和参数处理多个不同的任务了。


掌控板不但功能相当强大,而且学习生态非常的好,帮助文档很详尽,可操作性强,即使是初学者也可以很轻松的根据帮助文档进行学习。本教程就是基于掌控板的官方帮助文档之网络部分来开发的。

参考资料:10. 网络
资料链接
10.3. 套接字-TCP

1. App Inventor程序编写

a.组件设计:
我们的示例程序只完成最基本的发送和接收功能,所以组件设计相对比较简单。在客户端这里,需要一个组件(文本输入框)来发送用户输入的内容,还需要一个组件(标签)来显示掌控板回传的信息。组件设计如下图:
截图201904010116576335.png

b. 逻辑设计:

定义变量ip,用于存放掌控板的IP地址。这个地址在掌控板运行程序后会显示在监视窗口,记录下来填在代码块中。当然我们还可以使用文本输入框,在app运行时让用户填入,本例不再赘述。
当按钮send点击时,将标签的文本框清空,设置掌控板的IP地址,设置web客户端的网址,调用GET请求,将用户输入的内容传给掌控板。
截图201904010118072557.png

当web客户端获得文本后,将响应内容显示到标签的文本中。
截图201904010123187734.png

2. 掌控板程序编写

我们使用mPythonX来编写程序:

[Python] 纯文本查看 复制代码
import network
import socket
from mpython import *

oled.fill(0)     #清屏
oled.show()

wlan=network.WLAN(network.STA_IF)
ListenSocket=None
port=6832   #设置服务器的端口号
Head=b'HTTP/1.0 200 OK\r\n'      #设置http头尾
HeadEnd=b'\r\n'

try:
  wlan.active(True)
  wlan.connect("ssid","password")      #此处填写掌控板所处局域网的ssid和password
  print('connecting to network...')
  while(wlan.ifconfig()[0]=='0.0.0.0'):
    time.sleep_ms(500)
    print('.',end="")
  print('WiFi Connection Successful,Network Config:%s' %str(wlan.ifconfig()))     #掌控板连接路由器结束
  ip= wlan.ifconfig()[0]    #掌控板连接成功后的网络属性
  ListenSocket = socket.socket()
  ListenSocket.bind((ip,port))    #监听套接字绑定IP地址和端口
  ListenSocket.listen(5)    
  ListenSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  #创建套接字
  print ('http waiting...')
  oled.DispChar("%s:%s" %(ip,port),0,0)   #掌控板显示本机IP地址
  oled.DispChar('accepting.....',0,16)
  oled.show()
  while True:
    clientConn,clientAddr = ListenSocket.accept()     #获取客户端的套接字和地址
    print("Client address:", clientAddr)  
    print("Client socket:", clientConn)
    req = clientConn.recv(1024)  #从客户端套接字中读取1024字节数据
    print("Request:")
    print(req)
    reqs=bytes.decode(req)
    data_cut = reqs[5:]
    str1 = 'HTTP'
    position = data_cut.index(str1)
    data_cut = data_cut[0:position]    #将用户输入的内容从http中分离出来
    print(data_cut)
    oled.DispChar(data_cut,0,48)                                    # 将接收到文本oled显示出来
    oled.show()
    oled.fill_rect(0,48,128,16,0) 
    clientConn.send(Head.decode()+HeadEnd.decode()+"Hello,Juliet!")    #向手机发送信息
    clientConn.close()   #关闭套接字
except:
  print("except")
  oled.fill(0)
  oled.DispChar("except",0,0)
  oled.show()
  if(ListenSocket):
    ListenSocket.close()
  wlan.disconnect()


3. 测试


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

截图201904010922006949.png

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

截图201904010920271283.png

  • REPL首先显示 connecting to network... ,如果成功连接到wifi,则显示掌控板的网络配置:IP地址,子网掩码,网关和DNS,并显示http waiting。同时掌控板显示本机的IP地址及端口号,并显示"accepting"。说明掌控板已经准备好接收数据。

截图201904010923291865.png

截图201904010953212834.png

  • 手机通过AI伴侣连接到项目,成功后手机界面如下:
截图201904010937525754.png

  • 在文本输入框中输入要发送的信息:

截图201904010938051886.png

  • 点击按钮“点击发送”后,信息发送给掌控板,掌控板收到信息后向手机回传信息"Hello Juliet!"

截图201904010938234619.png

  • 与此同时,在mPythonX的REPL窗口,会显示接收到的数据,同时对数据切片,将输入的文本分离出来并显示在REPL及掌控板的oled屏上。

截图201904010950083310.png

截图201904010954226269.png

4. 拓展
当然用同样的方法我们可以向掌控板发送一组数据,掌控板根据逻辑进行判断并做出反馈。比如下面我们发送RGB值来点亮板载LED灯:

截图201904010958326241.png

点击“将颜色传给掌控板”后,掌控板上的3个LED灯按发送过来的RGB数值点亮
截图201904010958135406.png

截图201904010933341245.png

rzegkly  版主

发表于 2019-4-1 15:21:54


App Inventor与掌控板的板载传感器的通信很赞,App Inventor传一份?
回复

使用道具 举报

粒子  超级版主

发表于 2019-4-1 18:47:55

回复

使用道具 举报

szjuliet  版主
 楼主|

发表于 2019-4-2 08:37:11

rzegkly 发表于 2019-4-1 15:21
App Inventor与掌控板的板载传感器的通信很赞,App Inventor传一份?

好,我周末有空再写个帖子发上来~~
回复

使用道具 举报

w1  学徒

发表于 2019-4-4 16:49:58

楼主,我复制了代码 进行调试 显示这个错误   截图201904041648288563.png , 同样用的0.2.4 版本  什么原因呢
回复

使用道具 举报

szjuliet  版主
 楼主|

发表于 2019-4-4 18:21:58

w1 发表于 2019-4-4 16:49
楼主,我复制了代码 进行调试 显示这个错误  , 同样用的0.2.4 版本  什么原因呢 ...

我也遇到过,程序不存在语法错误,重新再点“调试代码”又正常,不知道是不是软件的bug。
回复

使用道具 举报

rzyzzxw  版主

发表于 2019-4-8 08:17:07

哈哈,教程很赞啊。
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail