用Python玩WiFi + S4A
講師: 楊松
主辦單位: 艾鍗科技有限公司 &
用Raspberry Pi 結合 Arduino
實現Wi-Fi 遙控車
1
Outline
Raspberry Pi 介紹
Python 語言介紹
Raspberry Pi + Python 應用案例介紹
擴充學習加速學習
Raspberry Pi + Python 開發無線 WiFi 遙控車介紹
- ESP8266 WiFi 模組介紹
- Motoduino 介紹
- S4A通訊協定介紹
- Raspberry Pi 透過 WiFi 模組控制 motoduino
Raspberry Pi + Python 開發機械手臂案例
Raspberry Pi + C 開發 RGB LED Matrix 案例
Raspberry Pi 介紹
樹莓派--Raspberry Pi
英國的樹莓派基金會所開發
基於Linux系統
信用卡大小電腦
低價硬體 – 35 美元
自由軟體
刺激學校基本電腦科學教育
3
Raspberry For 電腦科學教育
4
Raspberry For 電腦科學教育
5
Pi 是完整的小電腦
CPU: 900 MHz -ARM Cortex-A7
記憶體: 1GB
視訊輸出:
Composite RCA
HDMI
音訊輸出:
3.5 mm jack
HDMI(1.3 & 1.4)
儲存: microSD
USB: USB 2.0 x4
Ethernet: 10/100 RJ45
尺寸: 85mm x 56mm x 17mm
6
Linux 作業系統
7
Pi 不單純只是電腦
GPIO + SPI + I2C + UART
8
GPIO  控制與週邊硬體
9
I2C & SPI & UART modules
10
重力感測器模組
溫溼度感測器模組
磁力感測器模組
類比/數位轉換模組
PWM 控制器
RF 通訊模組
顯示器模組
…
Pi 發揮創意產生應用
11
Pi 發揮創意產生應用
12
複雜的應用: Bullet Time
13
QA: 有獎徵答…
• 請問Raspberry Pi 是哪一個國家的基金會所開
發?
•A- 美國
•B- 英國
•C- 日本
•D- 澳洲
QA: 有獎徵答…
• 請問Raspberry Pi 的尺寸大小為何?
•A- 一個房間那麼大
•B- 一台車子那麼大
•C- 一張桌子那麼大
•D- 一張名信片那麼大
Coding on Linux
16
Scratch 程式語言
17
Raspberry Pi + Python
18
Why Python?
• 具物件導向特性的直譯式語言
• 跨平台(windows, linux, mac os x)
• 豐富的函式庫支援
• 數值運算與科學繪圖 : Numpy, Matplotlib…
• GUI 圖形介面: Qt, Tkinter, wxPython…
• 網路應用: Socket、Django、Flask、Turnado…
• 資料庫: NoSQL、MySQL…
• 週邊硬體控制: GPIO、I2C、SPI、UART、GPIB、USB
19
Robot: Raspberry Pi + Python
20
Python + OpenCV
21
Raspberry Pi 教學子板
22
23
子板主要特點
24
用Raspberry Pi 結合 Arduino
實現 Wi-Fi 遙控車
25
車子結構
Motoduino
ESP8266
馬達外部電源(DC6V) 26
車子底盤結構
底部
前導輪 馬達
側面
27
Arduino & C++
28
Scratch For Arduino (S4A)
S4A Firmware
S4A protocol
29
Motorduino = Arduino +
Motor Controlling (L293D)
PWM 控制速度
(0~255)
PWM 控制速度
(0~255)
Motor A
轉動方向
Motor B
轉動方向
30
QA: 有獎徵答…
• 請問 S4A 的 “S”指的是?
•A- Scratch
•B- Super-Man
•C- Seven-Eleven
•D- Star-War
QA:有獎徵答…
• 請問 Motoduino 是有哪一個國家的廠商所發展
出來的?
•A- 沙烏地阿拉伯
•B- 剛果
•C- 台灣
•D- 烏克蘭
S4A 架構
Raspberry Pi
Motoduino
(Arduino)
• Linux OS
• S4A using scratch
• S4A Firmware
• Motor driver (L293D)
USB cable
S4A protocol
33
Wireless S4A 架構
Raspberry Pi
Motoduino
(Arduino)
• Linux OS
• S4A protocol implemented
by Python socket
• WiFi with AP mode
• S4A Firmware
• Motor driver (L293D)
• WiFi with STA mode (ESP8266)
WiFi Connection
S4A protocol
34
Labs
• Lab 0 : Motoduino Introduction
• Lab 1 : 燒錄S4A Firmware到Motoduino
• Lab 2 : Scratch for Arduino
• Lab 3 : Python 取代scratch
• Lab 4 : Python GUI (tkinter)
• Lab 5 : ESP8266 Introduction
• Lab 6 : UDP Socket
• Lab 7 : DEMO
35
S4A and Motoduino
USB Cable
Motoduino
Firmware
S4A
Motoduino
36
Motoduino
馬達外接電源 GND 電源
Motoduino
USB Cable
UART TX, RX
L293D
馬達控制
接口
馬達控制
接口
Arduino Atmel 328
37
外接電源Jumper
Controlling Motor
D7
D5
PWM 控制速度
(0~255)
PWM 控制速度
(0~255)
Motor A
轉動方向
Motor B
轉動方向
D6
D8
38
Pi – Motoduino Connection by
USB cable
39
Arduino 燒錄Motoduino
40
S4A and Motoduino connect
41
S4A Protocol – 訊號擷取
RX
TX
42
Protocol Timing
Pi Moto
MotoPi
~85ms
~16ms
43
Motoduino -> Pi
16 Bytes  8x2 (Channel : Value) 44
Pi -> Motoduino
20 Bytes  10x2 (Channel : Value)
45
S4A Protocol Spec.
Motoduino Motor Control
46
解析封包格式
1 0
High Byte Low Byte
Channel
[3:0]
Value
[6:0]
HL-identify (2 bit) +
Channel (4 bits) +
Value (10 bits)
Value
[9:7]
47
Motoduino Channel Def:  Pi
Channel Value
0 Analog Input (0~1023)
1 Analog Input (0~1023)
2 Analog Input (0~1023)
3 Analog Input (0~1023)
4 Analog Input (0~1023)
5 Analog Input (0~1023)
6 Digital : 0/1
7 Digital : 0/1
48
Motoduino Channel Def:  Pi
Channel Value
4 Continuous Rotation Motor
5 PWM: 0 ~ 255
6 PWM: 0 ~ 255
7 Digital : 0/1
8 Digital : 0/1
9 PWM: 0 ~ 255
10 Digital : 0/1
11 Digital : 0/1
12 Servo Motor
13 Digital : 0/1 49
有獎徵答(快結束了) …
• 請問 S4A 傳送封包的最小單位為何 ?
•A- 2 byte
•B- 1k byte
•C- 1M byte
•D- 1T byte
50
有獎徵答(快結束了) …
• 請問 Motoduino 的小車每隔多久會傳一次訊息
給Raspberry Pi ?
•A- 16 ms(毫秒)
•B- 1 分鐘
•C- 10 分鐘
•D- 30 分鐘
51
Labs
• Lab 0 : Motoduino Introduction
• Lab 1 : 燒錄S4A Firmware到Motoduino
• Lab 2 : Scratch for Arduino
• Lab 3 : Python 取代scratch
• Lab 4 : Python GUI (tkinter)
• Lab 5 : ESP8266 Introduction
• Lab 6 : Python UDP Socket
• Lab 7 : DEMO
52
Encoding
Decoding
解碼與編碼程式
53
USB connection
撰寫程式讀取 Motoduino 傳過來的訊息
Raspberry Pi
/dev/ttyUSB0
54
Show the received data
What is
This?
55
Resolve Packet
解析封包格式並取出各
channel 的資訊
ch0, ch1, ch2, ch3, ch4, ch5, ch6, ch7
56
Send Command
測試控制
57
Lab 3 : Send Command
Threading: 處理封包傳送Main loop : 指令輸入
Channel Value 58
Python GUI ( Tkinter )
59
Lab 4-GUI Control
60
Labs
• Lab 0 : Motoduino Introduction
• Lab 1 : 燒錄S4A Firmware到Motoduino
• Lab 2 : Scratch for Arduino
• Lab 3 : Python 取代scratch
• Lab 4 : Python GUI (tkinter)
• Lab 5 : ESP8266 Introduction
• Lab 6 : Python UDP Socket
• Lab 7 : DEMO
61
WiFi module : ESP8266
UART Interface
AT Commands
WiFi: Soft-AP, STA mode
TCP/UDP/IP Protocol
62
NodeMCU Firmware
UART Interface
Lua Script and API Support
Wi-Fi: Soft-AP, STA mode
TCP/UDP/IP Protocol
63
Lua Code Intrudction
Boot for
Auto WiFi Connection
Timer ISR:
Check IP per sec.
IF Get IP Then Setup UART
AND socket UDP connection64
ESP8266: write Lua Script
65
Lab 6 : UDP socket
66
Lab 6 : UDP socket : Receive
UART
Send & Receive
Message
Channel Value
67
Lab 6 : UDP socket : Send
Threading: 利用 Socket 處理封包傳送
Main loop : 處理指令輸入
68
Lab 6 : UDP socket : Send CMD
Channel Value 69
Lab 7: DEMO
GO~
GO~
70
有獎徵答(最後一次) …
• 請問 Motoduino 與 Raspberry Pi 的預設連接
方式為何?
•A- USB 連接線
•B- 光纖通訊
•C- 雷射通訊
•D- 電話線通訊
71
有獎徵答(最後一次) …
• 請問接下來的的實作要將 Motoduino 和
Raspberry Pi 的通訊方式轉換為何 ?
•A- WiFi 無線通訊
•B- 光纖通訊
•C- 雷射傳輸通訊
•D- 3G通訊
72
Summery of Labs
• Lab 0 : Motoduino Introduction
• Lab 1 : 燒錄S4A Firmware到Motoduino
• Lab 2 : Scratch for Arduino
• Lab 3 : Python 取代scratch
• Lab 4 : Python GUI (tkinter)
• Lab 5 : ESP8266 Introduction
• Lab 6 : UDP Socket
• Lab 7 : DEMO
73
Learn
• Scratch, Python, Lua 語法
• Arduino (MCU) 開發
• UART 通訊
• 同訊協定封包設計
• 馬達控制
• WiFi 通訊 UDP/IP
• GUI 人機介面實作
74
Pi + Python 開發案例過程
六軸機械手臂
75
六軸機械手臂
76
硬體架構
PWM
77
讀取 USB 搖桿指令
main 主程式
Joystick 物件
78
執行對應程式
main 主程式
Arm 物件 arm
PCA9685 物件 pwm
79
字元型態LCD顯示資訊
main 主程式
LCM 物件
80
Learn How to Do
• Python 開發
• I2C 通訊協定
• PWM 訊號
• 伺服馬達
• GPIO控制字元型態LCD
• USB HID Joystick 控制
• 控制系統設計 81
Pi + C 開發案例過程
RGB LED Matrix
64x32 pixels
82
硬體電路研究
83
84
Shift Registers
LAT
CLK
R1,G1,B1
A
B
C
D
0 1 0 0 0 1
Demultiplexer
LED Matrix: 64x16 + 64x16
85
R1, G1, B1
A,B,C,D
R2, G2, B2
A,B,C,D
16 bits x 4 = 64 bits
4bits[A:B:C:D]
Scan LED Matrix
86
C Programming
Array : 64x32 [R,G,B] bytes
Scan LED Matrix:
Shift Register input 64 bits
Shift Demultiplexer 0 ~ 31
Scanning LED matrix
87
Scanning Colorful
88
Bit
Bit
Bit
Pixel 8 bit scanning
89
7 6 5 4 3 2 1 0
128 64 32 16 8 4 2 1
Times
∆𝑇/255
Scanning Speed:
Algorithm
Program Structure
90
LED Matrix
Scanning Loop
RGB Matrix
Handling Loop
動畫、文字…
RGB Pixel Matrix [64][32]
Learn How to Do
• LED Matrix 線路設計
• C 語言
• 矩陣運算、處理、掃描演算法
• 作業系統: 多工處理排程
• Real Time OS、MCU、FPGA
91
Thank For You Attention
92

S4A