[Micropython]TPYBoard v202 智慧WIFI遠控小車
轉載請註明文章來源,更多教程可自助參考docs.tpyboard.com,QQ技術交流群:157816561,公眾號:MicroPython玩家匯
前言
----------------------
之前有過用TPYBoard v102製作的各種各樣功能的智慧小車,比如自動尋跡、自動避障、手機藍芽遙控等。想著還缺個WIFI控制的,那就用TPYBoard v202做一個吧。
設計思路
-------------------------
WIFI是目前最有廣泛運用的一項無線網路傳輸技術,覆蓋範圍廣,可遠端。本次實現了遠端WIFI控制,不僅可以在家裡操作,還可以接入一些雲平臺,實現遠端操控。具體思路如下:
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.%E6%99%BA%E8%83%BDWIFI%E8%BF%9C%E6%8E%A7%E5%B0%8F%E8%BD%A6&g