作者:趙英傑
出版社:旗標科技股份有限公司
出版日期:2018.5.1
頁數:640頁,雙色印刷(4頁全彩)。
定價:NT$699
- 用最夯的Python語言學習程式設計
- 用最超值的ESP8266控制板學物聯網
- 用最易懂的超圖解學電子電路
- 人人都能化身創客自造各種智慧應用
這是一本結合Python語言、電子電路、微電腦控制和物聯網的圖解入門書。
本書的電子零件清單與配套的材料包,請參閱這一篇貼文。
Python無疑是近年最受注目的通用型程式語言,它的語法簡單易學,不僅智慧型手機、個人電腦到網路雲端應用平台都支援Python程式,應用領域更遍及系統工具、網路程式、數值分析到人工智慧,而開放原始碼的MicroPython專案,則可在拇指大小的微電腦控制器上執行Python程式,讓你直接用Python控制硬體或開發物聯網專案,就連歐洲太空總署也將MicroPython應用在控制太空載具(詳見MicroPyhon官網論壇的“MicroPython and the European Space Agency”貼文)。
MicroPython支援多種32位元控制板,本書採用的是內建Wi-Fi無線網路、價格低廉的ESP8266系列控制板。
打好基礎,超圖解電子電路觀念
本書的目標是讓沒有電子電路基礎,對微電腦、電子DIY 及物聯網有興趣的人士,也能輕鬆閱讀、認識Python語言,進而順利使用Python與ESP8266控制板完成互動應用。因此,實驗用到的電子、電路組裝和Python程式觀念,皆以手繪圖解的方式說明。例如,底下是二級體元件的概念圖解:
為了方便讀者進行實驗,書本裡的電路都採用現成的模組,並搭配圖解說明,讓讀者不單只會照著接線,也能理解電子模組背後的原理,進而能靈活改造應用並實踐自己的想法。
WEMOS D1 mini (ESP8266) 控制板
ESP8266系列控制板種類很多,本書選用的是WEMOS D1 mini板:
採用D1 mini板的主要原因:
- 尺寸小、可插入麵包板。
- 有5V輸出和輸入,方便驅動各種週邊和感測器。
- 有多種現成的「擴展板」模組可用,而且擴展板的接腳採用標準2.54mm孔距的排母或排針,不像某些廠商採用特殊規格的插座。
擴展板雖然方便,但也有些缺點,像是配線彈性不足,有些擴展板佔用相同的微控器接腳,無法一同使用,有些則受限於擴展板的尺寸,像OLED顯示器和NeoPixel全彩LED,就採用解析度較低或者數量較少的元件,所以本書未全盤採用這些擴展板。
超圖解Python程式設計入門
為了清楚說明程式語法和執行結果,書本裡面的命令提示字元(終端機)視窗,也全都用手繪方式呈現:
底下是用Python語言建立網路用戶端和伺服器程式的流程和相關指令對照說明:
底下是在OLED螢幕呈現自訂符號的步驟和相關指令對照說明:
本書也有說明實用的物件導向程式設計(OOP)手法,自行編寫伺服馬達(Servo)、超音波距離感測器、直流馬達控制板…等程式庫。
這是用自製的超音波距離感測器程式庫,達成測量物體距離的Python程式解說:
書中也以範例實作說明物件導向程式設計中的「繼承」概念(註:實作內容與伺服馬達有關,不是拼裝獵雷鑑)。
最後的「附錄B」則說明如何運用Windows 10的WSL(適用於Linux的Windows子系統),安裝Debian Linux並且配置交叉編譯器(cross-compiler),讓讀者了解如何自行編譯客製化的MicroPython韌體。
《超圖解Python物聯網實作入門:使用ESP8266, MicroPython》目錄
第1章 認識MicroPython與ESP8266控制板
- 認識MicroPython、pyboard和ESP8266控制板
- 認識程式語言
- 在個人電腦上安裝Python 3.x版本
- WEMOS D1 mini和NodeMCU控制板簡介
- 下載與燒錄MicroPython韌體
- 透過終端機操控MicroPython控制板
- MicroPython和Arduino的程式開發流程比較
- 動手做 1-1 用Python控制LED閃爍
第2章 認識電子零件與工具
- 電壓、電流與接地
- 電阻
- 電容
- 二極體
- 發光二極體(LED)
- 看懂電路圖
- 微控制板和實驗電路的電源供應器
- 電子工作必備的量測工具:萬用電錶
- 動手做2-1 測量電阻或電容
- 麵包板以及其他電子工具
第3章 MicroPython基本操作
- MicroPython程式設計基礎
- 使用迴圈執行重複性質的工作
- 動手做 3-1 使用 while 執行已知次數或無限重複的工作
- MicroPython的互動解譯器模式(REPL)操作說明
- 上傳程式檔到ESP8266控制板
- 負載的接法:源流與潛流
- 動手做3-2 自行連接LED
- 用歐姆定律計算出限流電阻值
第4章 開關電路
- 認識開關
- 開關電路與上/下拉電阻
- 動手做4-1 用麵包板組裝開關電路
- 改變程式流程的if條件式
- 動手做4-2 LED切換開關
- 動手做4-3 用RC電路消除開關彈跳訊號
- 電容式觸控開關
- 動手做4-4 使用觸控開關模組製作LED開關
第5章 Python程式設計基礎
- 變數與資料類型
- 建立自訂函式
- 自訂程式庫與常數定義
- 處理文字訊息:認識字元與字串資料類型
- 列表(List)類型
- 元組(Tuple)與其他循序型資料操作指令
- 字典(Dictionary)類型
- 認識數字系統
第6章 Wi-Fi 無線網路
- 認識無線區域網路與Wi-Fi
- 從網頁瀏覽器操作MicroPython控制板
- 設定ESP8266以 STA(基站)模式連接無線網路
- 修改boot.py檔、開機自動連線
- 其他網路相關指令
- bytes(位元組)類型與字元編碼
第7章 序列埠通信
- 並列與序列通訊簡介
- DHT11數位溫濕度感測器
- 動手做7-1 製作數位溫濕度計
- 認識UART序列埠
- 建立UART序列通訊程式物件
- 動手做7-2 連接GPS模組
- 認識NMEA標準格式與獲取GPS的經緯度值
第8章 數位調節電壓強弱與全彩LED控制
- 使用Timer(計時器)定時執行程式
- 動手做8-1 使用定時器閃爍LED
- 使用try…except捕捉例外狀況
- 用匿名函式(lambda)改寫閃爍 LED 程式
- 數位調節電壓變化
- 動手做8-2 呼吸燈效果
- 控制全彩 LED
- 動手做8-3 控制RGB全彩LED
- 旋轉編碼器
- 動手做8-4 連接旋轉編碼器與ESP8266控制板
- 動手做8-5 使用旋轉編碼器調整LED色彩
- WS2812彩色LED模組與燈條
- 動手做8-6 調控WS2812的色彩
- 動手做8-7 跑馬燈效果
第9章 電晶體與蜂鳴器和直流馬達控制
- 認識電晶體元件
- 發音體和聲音
- 動手做9-1 發出警報聲響
- 動手做9-2 電流急急棒
- 彈奏音樂
- 動手做9-3 演奏一段瑪莉歐旋律
- 認識直流馬達
- 動手做9-4 電晶體馬達控制與調速器
第10章 控制伺服馬達
- 認識伺服馬達
- 動手做10-1 伺服馬達的控制程式
- 自訂類別:遠離義大利麵條
- 動手做10-2 編寫控制伺服馬達的自訂類別
- 動手做10-3 吃錢幣存錢筒
- 繼承:建立子類別
- 動手做10-4 隨機轉動標靶
第11章 類比信號處理
- 讀取類比值
- 動手做11-1 讀取類比值並調控LED亮度
- 認識光敏電阻與分壓電路
- 動手做11-2 使用光敏電阻製作小夜燈
- 壓力感測器與彎曲感測器
- 熱敏電阻
- 動手做11-3 使用熱敏電阻測量溫度
- 動手做11-4 雷射槍玩具標靶
- 電容式麥克風元件與聲音放大模組
- 動手做11-5 拍手控制開關
- 動手做11-6 拍手控制開關改良版
第12章 I2C介面:連接週邊與擴充ESP8266的類比輸入埠
- 認識I2C介面
- 類比轉數位(ADC)的專用IC介紹
- 動手做12-1 連接PCF8591類比轉數位模組和I2C介面
- 動手做12-2 自製二軸雲台(機械手臂)
- 使用OLED顯示器顯示文字訊息
- 動手做12-3 使用ssd1306程式庫操控OLED模組
- 自訂顯示圖像
- 動手做12-4 在OLED上顯示自訂符號
- 使用LCD Assistant軟體轉換圖像
- 動手做12-5 在OLED顯示動態溫濕度值
第13章 超音波距離感測器與I2C直流馬達驅動控制板實驗
- 認識超音波
- 動手做13-1 使用超音波感測器製作數位量尺
- 建立超音波自訂類別與發出自訂例外錯誤
- 動手做13-2 超音波距離控制燈光亮度
- 控制馬達正反轉的H橋式馬達控制電路
- WEMOS馬達擴展板
- 動手做13-3 自動迴避障礙物的自走車
- 用MicroPython改寫WEMOS原廠的Arduino馬達驅動程式庫
- 位移和邏輯運算子
第14章 製作GPS軌跡記錄器
- 讀取與設定本機時間
- 動手做14-1 在OLED螢幕顯示GPS定位的台北時間
- 使用os程式庫操作檔案
- 建立與寫入檔案
- 輪詢VS中斷
- 動手做14-2 使用中斷要求開、關LED
- 動手做14-3 建立儲存GPS紀錄的CSV格式檔案
- 在谷歌地圖呈現GPS移動軌跡
第15章 SPI介面控制:LED矩陣和MicroSD記憶卡
- LED矩陣元件
- 認識SPI介面與MAX7219 IC
- 動手做15-1 組裝LED矩陣電路
- 顯示單一矩陣圖像
- 動手做15-2 在 LED 矩陣上顯示音符圖像
- 動手做15-3 在終端機顯示矩形排列的星號
- 動手做15-4 LED矩陣動畫與多維序列資料程式設計
- 動手做15-5 連接MicroSD/SD記憶卡
第16章 網路程式基礎入門
- 認識網路與IP位址
- 網域名稱、URL網址和傳輸協定
- 網路的連線標準與封包
- 使用Socket建立網路通訊程式
- 動手做16-1 使用Socket建立一對一通訊程式
- 認識網頁與HTML
- 認識HTTP通訊協定
- 動手做16-2 連結網站的用戶端程式
- 認識HTTPS加密連線
第17章 物聯網應用初步
- 建立網站
- 動手做17-1 建立網站伺服器
- 動手做17-2 動態顯示溫濕度資料
- 動手做17-3 讀取並顯示HTML網頁和圖像
- 認識 ThingSpeak物聯網雲端平台
- 透過查詢字串傳遞資料
- 動手做17-4 用urequest程式庫上傳資料到ThingSpeak平台
- 使用POST方法傳遞資料
- 解析查詢字串
- 動手做17-5 搭配互動網頁介面的燈光調控器
- 控制家電開關
- 動手做17-6 使用繼電器控制家電開關
第18章 物聯網應用
- 網路應用程式訊息交換格式:XML與JSON
- 動手做 18-1 讀取JSON格式的世界各地天氣資料
- 動手做 18-2 在OLED螢幕顯示氣象資訊
- 認識MQTT
- 動手做18-3 使用ESP8266發布資料到ThingSpeak MQTT伺服器
- 動手做18-4 訂閱ThingSpeak MQTT訊息
- ESP8266微控器的即時鐘(RTC)
- 動手做18-5 透過網際網路更新時間
- 超低功耗的深度睡眠模式
- 動手做18-6 進入深度睡眠與喚醒微控器
- 動手做18-7 自動睡眠、喚醒並上傳資料到ThingSpeak平台
附錄A uPyCraft與Tera Term使用說明
- uPyCraft整合開發工具使用說明
- 使用Tera Term終端機軟體
附錄B 編譯客製化的MicroPython韌體
- 在Windows 10系統中安裝與執行Linux工具軟體
- 交叉編譯MicroPython韌體
- 從Linux環境複製檔案到Windows環境
- 建立客製化的MicroPython韌體
內容勘誤
第3章 MicroPython基本操作
3-20頁,上方程式編輯器裡的while i in range(3):敘述,正確是for i in range(3):
第4章 開關電路
4-14頁,底下程式第一行的time=5,正確是time=15。
第5章 Python程式設計基礎
5-19頁,中間程式第一行id=12,正確是num=12。
第7章 序列埠通信
7-18頁,下方團片中的GPIO11,正確是GPIO1。
7-28頁,最後一段的第13章,正確是第14章。
7-48頁以及14-5頁,GPS日期格式的圖說中,日、月數字顛倒。
第8章 數位調節電壓強弱與全彩LED控制
8-4頁,底下的ujon程式碼,D1 = ”’,正確是 data = ”’
8-28頁,實驗程式第一行,from machine import Pin,正確是from machine import Pin, PWM
第9章 電晶體與蜂鳴器和直流馬達控制
9-22頁,TIP120馬達驅動電路,TIP120的E(射極)要接地,馬達一端要接正電源。
9-23頁,中間內文(參閱第12章介紹),正確是第13章。
第10章 控制伺服馬達
10-2頁,第二段文字中的參閱第10章,正確是第8章。
第11章 類比信號處理
11-29頁,「增加拍手次數」註解底下的 print(‘claps: ‘ + claps),正確是print(‘claps: ‘ + str(claps))。
第12章 I2C介面:連接週邊與擴充ESP8266的類比輸入埠
12-25頁,最下方程式碼當中的 oled.framebuf.blit,正確是oled.blit。
12-30頁,程式碼當中的 self.oled.framebuf.blit,正確是self.oled.blit。
第16章 網路程式基礎入門
16-32頁,程式碼當中的 wlan = network.WLAN(network.waln),正確是wlan = network.WLAN(network.STA_IF)。
第17章 物聯網應用初步
17-7頁,程式碼當中的 client.send(httpHeader.format(temp, humid)),正確是client.send(httpHeader.format(temp=temp, humid=humid))。
第18章 物聯網應用
18-10頁,「實驗說明」中的動手做11-3,正確是12-3。
18-11頁,內文中間的第11章,正確是第12章。
18-14頁,程式碼第2行的 oled.framebuf.blit(fb, 0, 15),正確是oled.blit(fb, 0, 15)。
趙老師您好:
想請教一下, 我用esp8266 d1mini 連接 HC05 藍牙模組, 將HC05的txd接到8266的 rx, 中間有照書中7-20頁示範由8266的rx接一個二極體到hc05的txd
藍牙與手機連線配對後, 用手機的 app 傳送單一字元, 例如:A 給 esp8266, 但esp8266 一直都接收不到任何東西
主要的程式參照 7-21頁上方的示範, 將程式利用thonny 編輯儲存成test.py 如下, 然後在webrepl執行 import test:
from machine import UART
com=UART(0, 9600)
com=init(9600)
while True:
data=com.read()
if data:
print(data)
藍牙模組的RX和TX電位是3.3V,所以不需要接二極體。
老師您好:我剛剛試了拿掉二極體
然後在webREPL執行 import TEST
其中 TEST.py程式的內容如下:
from machine import UART
import time
com=UART(0, 9600)
com.init(9600)
while True:
data=com.read()
if data:
print(data)
time.sleep_ms(20)
執行後,必須要按下CTRL+C 跳出程式後
才會看到我傳入的字元,沒有辦法在程式執行中印出我傳入的字元
不過至少確定電路接線是沒問題,
不知道程式的問題是出在哪裡,為什麼要按下CTRL+C後才看的到??
拍謝,請參閱這一則回應,加入這個敘述:
問題解決了, 謝謝老師協助, 感恩
不客氣
adc_feedback=b”’\
HTTP/1.1 200 OK
ADC={val}
”’.format(val=data)
data=adc.read()
client.send(adc_feedback)
老師您好, 我想請教一下, 我想用ESP8266 D1 mini 將其ADC的資料用 WiFi 傳送到筆電,
如上面的程式範例,程式一直跑出我的data變數在adc_feedback資料裡面沒有定義
以上是我的部份程式,
請教一下是什麼原因, 以及我該如何處理。
謝謝老師
因為data直到這個敘述執行才被宣告:
data=adc.read()
所以程式碼要改成:
老師您好,想請問6-8頁啟用webrepl遇到的問題
import webrepl_setup
WebREPL daemon auto-start status: enabled
Would you like to (E)nable or (D)isable it running on boot?
(Empty line to quit)
e
Would you like to change WebREPL password? (y/n) n
No further action required
請問No further action required要怎麼解決
“No further action required” 代表無需執行其他操作。
請關閉PuTTY,按一下開發板的Reset鍵,
等一會兒讓它連上網路。
再開啟WebREPL的操作頁面,從瀏覽器連線開發板。
老師您好 關於 client.connect() 因為如果伺服器異常或關閉 我的ESP32會報錯
造成我 需要等待伺服器正常 然後還要把ESP32關電在送電後才可以繼續使用
有辦法提前知道伺服器正常嗎?
我想要讓ESP32等待 等待到伺服器正常 我在跟伺服器連線
程式說明請參閱18-22頁
client.connect()
client.publish(config[‘topic’], data.encode())
time.sleep(2)
client.disconnect()
請參閱16-25頁的HTTP狀態碼,以及17-25頁的urequests物件的status_code屬性,可以透過HTTP回應碼得知資料是否請求成功。類似這樣:
老師您好! 我按書本 “超圖解Python物聯網實作入門” 1-5 下載與燒錄 MicroPython 韌體, 之後按1.6 用Putty 連接控制板, 但只得黑屏, 沒有訊息顯示, 請問可能的問題出在那裡? 我要留意甚麼設定? 謝謝!
可能是Flash的大小選錯導致。另外,請參閱這篇貼文,採用Thonny IDE燒錄韌體、編寫程式和測試:
使用Thonny Python IDE編寫MicroPython程式(一)
趙老師, 您好!
在18-20 說:「使用MQTT項協定來訂閱訊息之前, 需要先取得MQTT API Key」。在thingSpeak – My Profile 下找不到 MQTT API Key 的選項, 是否 thingSpeak 的設定有更改? 程式碼是否要更改? 謝謝!
感謝告知,我晚上測試看看。
更新:請參閱「MQTT教學(十一):上傳資料到ThingSpeak MQTT伺服器的Arduino與MicroPython程式」
老師您好 我參考書上gps的範例 但我用的是有整個模塊(有wifi的)esp8266 gps則一樣 接線則rx tx 互接 vin 5v gnd gnd 然後我用裝micropython延伸模組的vscode寫 程式為第一個範例 執行後無反應 (>>>後空白)請問哪裡可能有問題?
請檢察接線:微控器的RX接GPS的TX,反之亦然。
有些GPS的電源可接3.3V,請接3.3V試試。
如果GPS接3.3V,二極體可省略。
老師您好 我是3/11問問題的那位 這個問題在參考(使用ESP32控制板(三),https://swf.com.tw/?p=1338)這篇後已解決,目前我想把接收到的資料顯示到nodered的worldmap上,那是否能用esp32在連網後用mqtt連接nodered將gps的資料顯示出來呢,目前還是不太確定這個流程是否可行
感謝告知,我認為可行,但我很久沒用Node-RED了… 請自行測試。
老師您好:
我在執行diy12_5.py時總是會跑出 no module named ‘bigSymbol’,請問是該怎麼解決?
你好,請問你有先上傳bigSymbol.py到開發板嗎?(參閱12-31頁)