转载请注明文章来源, 更多教程可自助参考 docs.tpyboard.com,QQ 技术交流群: 157816561, 公众号: MicroPython 玩家汇
前言
----------------------
之前有过用 TPYBoard v102 制作的各种各样功能的智能小车, 比如自动寻迹, 自动避障, 手机蓝牙遥控等. 想着还缺个 Wi-Fi 控制的, 那就用 TPYBoard v202 做一个吧.
设计思路
-------------------------
Wi-Fi 是目前最有广泛运用的一项无线网络传输技术, 覆盖范围广, 可远程. 本次实现了远程 Wi-Fi 控制, 不仅可以在家里操作, 还可以接入一些云平台, 实现远程操控. 具体思路如下:
1,TPYBoard v202 作为整个小车的核心控制部分, 连接 L298N 电机驱动模块, 实现小车的基本方向控制;
2,TPYBoard v202 接入网络, 开启 Socket 服务实现 web 服务器功能;
3, 手机接入同一局域网, 可通过浏览器访问控制页面, 进行小车控制.
所需器件
---------------------------------
- TPYBoard v202 开发板 1 块
- USB 数据线 (MicroUSB) 1 条
- L298N 电机驱动模块 1 个
- 小车套件包 (底板, 电机等) 1 个
- 18650 电池 2 节
- 18650 电池盒 1 个
程序源码
----------------------------------
TPYBoard v202 源代码 (main.py)
- import socket #导入 socket 通信库
- import machine
- from machine import Pin
- g4 = Pin(4,Pin.OUT)
- g5 = Pin(5,Pin.OUT)
- g12 = Pin(12,Pin.OUT)
- g13 = Pin(13,Pin.OUT)
- def Go():
- g4.value(1)
- g5.value(0)
- g12.value(1)
- g13.value(0)
- def Back():
- g4.value(0)
- g5.value(1)
- g12.value(0)
- g13.value(1)
- def Left():
- g4.value(1)
- g5.value(0)
- g12.value(0)
- g13.value(0)
- def Right():
- g4.value(0)
- g5.value(0)
- g12.value(1)
- g13.value(0)
- def Stop():
- g4.value(0)
- g5.value(0)
- g12.value(0)
- g13.value(0)
- #-----------------------HTTP Server-----------------------#
- #ap 模式下, 默认 ip 地址为 192.168.4.1
- addr = ('192.168.4.1',80) #定义 socket 绑定的地址, ip 地址为本地, 端口为 80
- s = socket.socket() #创建一个 socket 对象
- s.bind(addr) #绑定地址
- s.listen(5) #设置允许连接的客户端数量
- print('listening on:', addr)
- while True:
- cl, addr = s.accept() #接受客户端的连接请求, cl 为此链接创建的一个新的 scoket 对象, addr 客户端地址
- print('client connected from:', addr)
- cl_file = cl.makefile('rwb', 0) #返回与 socket 对象关联的文件对象. rwb: 支持二进制模式的读写操作 0: 默认值, 不支持缓存
- req = b''
- while True:
- line = cl_file.readline() #读取发送过来的数据, 直到 \ r\n 换行结束
- if not line or line == b'\r\n':
- break
- req += line
- print("Request:")
- req=req.decode('utf-8').split('\r\n')
- #http header 解析
- req_data=req[0].lstrip().rstrip().replace('','').lower()
- print(req_data)
- if req_data.find('favicon.ico')>-1:
- cl.close()
- continue
- else:
- req_data=req_data.replace('get/?','').replace('http/1.1','')
- index = req_data.find('key=')
- value = req_data[index+4:index+6].lstrip().rstrip()
- print('key:',value)
- if value == 'go':
- Go()
- elif value == 'ba':
- Back()
- elif value == 'le':
- Left()
- elif value == 'ri':
- Right()
- else:
- Stop()
- with open("control.html", 'r') as f:
- for line in f:
- cl.send(line)
- #cl.send(response) #返回 HTML 网页的数据
- cl.close() #关闭 socket
硬件的连接
----------------------------
网页效果
-------------------------
演示效果
- -------------------------
- ` 点击观看视频 <http://mpvideo.qpic.cn/0bf2hqaaeaaaveaa3ui5h5pfapgdai6aaaqa.f10002.mp4?dis_k=75bc9f531e0fe018cfc344a63c5fdc1d&dis_t=1579070805>`_
源码下载
- --------------
- ` 下载源码 <https://github.com/TPYBoard/TPYBoard-v202/tree/master/12.智能WIFI远控小车>`_
来源: https://www.cnblogs.com/xiaowuyi/p/12196867.html