2.3 KiB
2.3 KiB
网络
1、控制小车
通过TCP连接树莓派控制小车的简单例子
需求:
- 通过TCP连接到树莓派控制小车前后左右
- 前进:0-100, 发送命令为F:2
- 后退:0-100, 发送命令为B:2
- 向左:32-42, 发送命令为L:2
- 向右:42-52, 发送命令为R:2
注意:
- 这里只用了UI文件做界面,并没有转换为python代码
- server.py只是做个本地echo服务器用来测试命令是否正常,依赖
tornado
库,可以通过pip install tornado
来安装 - 另外需要做粘包处理,以(\n)作为粘包符
- 由于wifi能力不行,发送图片要尽量小
说明:
QTcpSocket.connected
服务连接成功后触发该信号QTcpSocket.disconnected
服务器丢失连接触发该信号QTcpSocket.readyRead
服务器返回数据触发该信号QTcpSocket.error
连接报错触发该信号(连接超时、服务器断开等等)
目前暂未修复接收图片异,原因在于readyRead
中没有判断数据长度进行多次接收(类似粘包处理)
2、窗口配合异步Http
asyncio
结合PyQt例子
-
依赖库:
quamash
(对QT事件循环的封装替换):https://github.com/harvimt/quamashasyncio
:https://docs.python.org/3/library/asyncio.htmlaiohttp
:https://aiohttp.readthedocs.io/en/stable/
-
在创建
QApplication
后随即设置替换事件循环loop
app = QApplication(sys.argv)
loop = QEventLoop(app)
asyncio.set_event_loop(loop)
w = Window()
- 通过
asyncio.ensure_future(函数(), loop=loop)
来执行某个异步函数
Window →→ initSession(初始化session)
↓
↓
下载按钮 →→ doDownload(执行_doDownload方法)
↓
↓
session.get(下载json数据进行解析)
↓
↓
添加到界面 ←← _doDownloadImage(对单张图片进行下载)