2520浏览
查看: 2520|回复: 1

[M10项目] 行空板——wifi无线键盘

[复制链接]
本帖最后由 云天 于 2022-9-22 20:35 编辑

行空板——wifi无线键盘图1
【项目背景】
行空板自带了Wi-Fi:  2.4G,自带Linux操作系统和python环境,我准备利用TCP传输层的协议,完成一个无线键盘,并利用它来玩一个小游戏。
【知识准备】

1.TCP协议

是传输层的协议,解决的问题,是端口与端口的通信问题。

TCP 每次建立通信,都需要三次握手,确定双方状态完毕,在发送数据。如果发送的数据出现了异常,TCP 也内置了一些处理的机制,确保了数据能准确到达目的地。

2.行空板

是一款拥有自主知识产权的国产教学用开源硬件,采用微型计算机架构,集成LCD彩屏、WiFi蓝牙、多种常用传感器和丰富的拓展接口。同时,其自带Linux操作系统和python环境,还预装了常用的python库,让广大师生只需两步就能开始python教学。

行空板——wifi无线键盘图2

【准备工作】


1.硬件清单

行空板、micro:bit扩展板、按钮、电池座、PVC板

2.行空板连接WIFI

使用USB线连接行空板与电脑。打开电脑的浏览器,输入板子的ip10.1.2.3,就可以打开界面。

行空板——wifi无线键盘图3

进入网络设置页面会自动扫描板子周围的WiFi,在名称下拉框选择需要连接的WiFi,在密码输入框输入密码,点击连接即可让板子连接WiFi。

行空板——wifi无线键盘图4

【键盘制作】

五个按钮在PVC板上排列好,四个做为“上下左右”,另一个做为“空格”。

行空板——wifi无线键盘图5

在盖上挖出各按钮的位置孔。

行空板——wifi无线键盘图6

安装四周档板

行空板——wifi无线键盘图9

行空板——wifi无线键盘图7

封装成键盘盒

行空板——wifi无线键盘图8

【编写程序】

1、测试TCP通信

服务端代码:

  1. import socket               # 导入 socket 模块
  2. s = socket.socket()         # 创建 socket 对象
  3. host = '192.168.31.51'      # 设置本地主机地址
  4. print('服务器地址:', host)
  5. port = 12345                # 设置端口
  6. s.bind((host, port))        # 绑定端口
  7. s.listen(5)                 # 等待客户端连接
  8. c,addr = s.accept()     # 建立客户端连接
  9. while True:
  10.     #print('连接地址:', addr)
  11.     content=c.recv(2)
  12.     print(content)
  13. c.close
复制代码

客户端程序:
  1. import socket               # 导入 socket 模块
  2. s = socket.socket()         # 创建 socket 对象
  3. host = '192.168.31.51'      # 设置要连接的服务器地址
  4. port = 12345     # 设置端口号
  5. s.connect((host, port))
  6. s.send(b'L')
复制代码
2、客户端按键,并增加行空板屏幕显示
  1. import socket               # 导入 socket 模块
  2. from pinpong.extension.unihiker import *
  3. from pinpong.board import Board,Pin
  4. import time
  5. from unihiker import GUI
  6. u_gui=GUI()
  7. 屏幕=u_gui.draw_text(text="行空板",x=45,y=120,font_size=40, color="#0000FF")
  8. Board().begin()
  9. p_p8_in=Pin(Pin.P8, Pin.IN)
  10. p_p9_in=Pin(Pin.P9, Pin.IN)
  11. p_p12_in=Pin(Pin.P12, Pin.IN)
  12. p_p13_in=Pin(Pin.P13, Pin.IN)
  13. p_p14_in=Pin(Pin.P14, Pin.IN)
  14. s = socket.socket()         # 创建 socket 对象
  15. host = '192.168.31.51'      # 设置要连接的服务器地址
  16. port = 12345     # 设置端口号
  17. s.connect((host, port))
  18. bs1 = 0
  19. bs2 = 0
  20. bs3 = 0
  21. bs4 = 0
  22. bs5 = 0
  23. while True:
  24.    
  25.     if(p_p8_in.read_digital()==True):
  26.        if(bs1 == 0):   
  27.          s.send(b'L')
  28.          bs1 = 1
  29.          屏幕.config(text="向左")
  30.     else:
  31.         if(bs1 == 1):   
  32.          s.send(b'L1')
  33.          bs1 = 0
  34.          屏幕.config(text="")
  35.     if(p_p9_in.read_digital()==True):
  36.        if(bs2 == 0):   
  37.          s.send(b'D')
  38.          bs2 = 1
  39.          屏幕.config(text="向下")
  40.     else:
  41.        if(bs2 == 1):   
  42.          s.send(b'D1')
  43.          bs2 = 0
  44.          屏幕.config(text="")
  45.     if(p_p12_in.read_digital()==True):
  46.        if(bs3 == 0):   
  47.          s.send(b'R')
  48.          bs3 = 1
  49.          屏幕.config(text="向右")
  50.     else:
  51.        if(bs3 == 1):   
  52.          s.send(b'R1')
  53.          bs3 = 0
  54.          屏幕.config(text="")
  55.     if(p_p13_in.read_digital()==True):
  56.        if(bs4 == 0):   
  57.          s.send(b'U')
  58.          bs4 = 1
  59.          屏幕.config(text="向上")
  60.     else:
  61.        if(bs4 == 1):   
  62.          s.send(b'U1')
  63.          bs4 = 0
  64.          屏幕.config(text="")
  65.     if(p_p14_in.read_digital()==True):
  66.        if(bs5 == 0):   
  67.          s.send(b'S')
  68.          bs5 = 1
  69.          屏幕.config(text="跳起")
  70.     else:
  71.        if(bs5 == 1):   
  72.          s.send(b'S1')
  73.          bs5 = 0
  74.          屏幕.config(text="")
  75. s.close()           
复制代码


3.服务器接收按键指令,并模拟键盘按键
  1. import socket               # 导入 socket 模块
  2. import pyautogui
  3. s = socket.socket()         # 创建 socket 对象
  4. host = '192.168.31.51'      # 设置本地主机地址
  5. print('服务器地址:', host)
  6. port = 12345                # 设置端口
  7. s.bind((host, port))        # 绑定端口
  8. s.listen(5)                 # 等待客户端连接
  9. c,addr = s.accept()     # 建立客户端连接
  10. while True:
  11.     #print('连接地址:', addr)
  12.     content=c.recv(2)
  13.     if content==b'L':
  14.         pyautogui.keyDown(key="left")
  15.     elif content==b'L1':
  16.         pyautogui.keyUp(key="left")
  17.     if content==b'R':
  18.         pyautogui.keyDown(key="right")
  19.     elif content==b'R1':
  20.         pyautogui.keyUp(key="right")
  21.     if content==b'U':
  22.         pyautogui.keyDown(key="up")
  23.     elif content==b'U1':
  24.         pyautogui.keyUp(key="up")
  25.     if content==b'D':
  26.         pyautogui.keyDown(key="down")
  27.     elif content==b'D1':
  28.         pyautogui.keyUp(key="down")
  29.     if content==b'S':
  30.         pyautogui.keyDown(key="space")
  31.     elif content==b'S1':
  32.         pyautogui.keyUp(key="space")
  33. c.close()
复制代码

【演示操作】利用行空板无线键盘玩开摩托车小游戏。
行空板——wifi无线键盘图10

行空板——wifi无线键盘图11

【演示视频】


rzegkly  版主

发表于 2022-9-12 09:27:10

很好的创意,喜欢
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail