行空板——wifi无线键盘
本帖最后由 云天 于 2022-9-22 20:35 编辑【项目背景】
行空板自带了Wi-Fi:2.4G,自带Linux操作系统和python环境,我准备利用TCP传输层的协议,完成一个无线键盘,并利用它来玩一个小游戏。
【知识准备】
1.TCP协议是传输层的协议,解决的问题,是端口与端口的通信问题。TCP 每次建立通信,都需要三次握手,确定双方状态完毕,在发送数据。如果发送的数据出现了异常,TCP 也内置了一些处理的机制,确保了数据能准确到达目的地。2.行空板是一款拥有自主知识产权的国产教学用开源硬件,采用微型计算机架构,集成LCD彩屏、WiFi蓝牙、多种常用传感器和丰富的拓展接口。同时,其自带Linux操作系统和python环境,还预装了常用的python库,让广大师生只需两步就能开始python教学。【准备工作】
1.硬件清单行空板、Micro:bit扩展板、按钮、电池座、PVC板2.行空板连接WIFI使用USB线连接行空板与电脑。打开电脑的浏览器,输入板子的ip10.1.2.3,就可以打开界面。进入网络设置页面会自动扫描板子周围的WiFi,在名称下拉框选择需要连接的WiFi,在密码输入框输入密码,点击连接即可让板子连接WiFi。【键盘制作】五个按钮在PVC板上排列好,四个做为“上下左右”,另一个做为“空格”。在盖上挖出各按钮的位置孔。安装四周档板封装成键盘盒【编写程序】1、测试TCP通信服务端代码:
import socket # 导入 socket 模块
s = socket.socket() # 创建 socket 对象
host = '192.168.31.51' # 设置本地主机地址
print('服务器地址:', host)
port = 12345 # 设置端口
s.bind((host, port)) # 绑定端口
s.listen(5) # 等待客户端连接
c,addr = s.accept() # 建立客户端连接
while True:
#print('连接地址:', addr)
content=c.recv(2)
print(content)
c.close
客户端程序:
import socket # 导入 socket 模块
s = socket.socket() # 创建 socket 对象
host = '192.168.31.51' # 设置要连接的服务器地址
port = 12345 # 设置端口号
s.connect((host, port))
s.send(b'L')
2、客户端按键,并增加行空板屏幕显示
import socket # 导入 socket 模块
from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
import time
from unihiker import GUI
u_gui=GUI()
屏幕=u_gui.draw_text(text="行空板",x=45,y=120,font_size=40, color="#0000FF")
Board().begin()
p_p8_in=Pin(Pin.P8, Pin.IN)
p_p9_in=Pin(Pin.P9, Pin.IN)
p_p12_in=Pin(Pin.P12, Pin.IN)
p_p13_in=Pin(Pin.P13, Pin.IN)
p_p14_in=Pin(Pin.P14, Pin.IN)
s = socket.socket() # 创建 socket 对象
host = '192.168.31.51' # 设置要连接的服务器地址
port = 12345 # 设置端口号
s.connect((host, port))
bs1 = 0
bs2 = 0
bs3 = 0
bs4 = 0
bs5 = 0
while True:
if(p_p8_in.read_digital()==True):
if(bs1 == 0):
s.send(b'L')
bs1 = 1
屏幕.config(text="向左")
else:
if(bs1 == 1):
s.send(b'L1')
bs1 = 0
屏幕.config(text="")
if(p_p9_in.read_digital()==True):
if(bs2 == 0):
s.send(b'D')
bs2 = 1
屏幕.config(text="向下")
else:
if(bs2 == 1):
s.send(b'D1')
bs2 = 0
屏幕.config(text="")
if(p_p12_in.read_digital()==True):
if(bs3 == 0):
s.send(b'R')
bs3 = 1
屏幕.config(text="向右")
else:
if(bs3 == 1):
s.send(b'R1')
bs3 = 0
屏幕.config(text="")
if(p_p13_in.read_digital()==True):
if(bs4 == 0):
s.send(b'U')
bs4 = 1
屏幕.config(text="向上")
else:
if(bs4 == 1):
s.send(b'U1')
bs4 = 0
屏幕.config(text="")
if(p_p14_in.read_digital()==True):
if(bs5 == 0):
s.send(b'S')
bs5 = 1
屏幕.config(text="跳起")
else:
if(bs5 == 1):
s.send(b'S1')
bs5 = 0
屏幕.config(text="")
s.close()
3.服务器接收按键指令,并模拟键盘按键
import socket # 导入 socket 模块
import pyautogui
s = socket.socket() # 创建 socket 对象
host = '192.168.31.51' # 设置本地主机地址
print('服务器地址:', host)
port = 12345 # 设置端口
s.bind((host, port)) # 绑定端口
s.listen(5) # 等待客户端连接
c,addr = s.accept() # 建立客户端连接
while True:
#print('连接地址:', addr)
content=c.recv(2)
if content==b'L':
pyautogui.keyDown(key="left")
elif content==b'L1':
pyautogui.keyUp(key="left")
if content==b'R':
pyautogui.keyDown(key="right")
elif content==b'R1':
pyautogui.keyUp(key="right")
if content==b'U':
pyautogui.keyDown(key="up")
elif content==b'U1':
pyautogui.keyUp(key="up")
if content==b'D':
pyautogui.keyDown(key="down")
elif content==b'D1':
pyautogui.keyUp(key="down")
if content==b'S':
pyautogui.keyDown(key="space")
elif content==b'S1':
pyautogui.keyUp(key="space")
c.close()
【演示操作】利用行空板无线键盘玩开摩托车小游戏。
【演示视频】
https://www.bilibili.com/video/BV1ka411u7em?share_source=copy_web
很好的创意,喜欢
页:
[1]