# mPython with ESP32 / Thonny
## [社團介紹](https://hackmd.io/@Zoyam/B1muGtUpL)/[總課綱](https://hackmd.io/@Zoyam/H1oC9wzdd)/[上課影片](https://youtu.be/wEN8Z80FZvQ)/[範例程式](https://drive.google.com/drive/folders/13Gs1j_lh_5NnKZ4zqfTwqhZUU_d5uFpO?usp=sharing)/[mPython讀書會](https://hackmd.io/8iwg8KPVQAauwI51V00mDg?view)
## 0-1、參考資料
* 硬體篇
1. [重要-中文-MicroPython on ESP8266 學習筆記索引(注意腳位後即可使用在ESP32上)](http://yhhuang1966.blogspot.com/2019/04/micropython.html)
2. [重要-英文-RandomNerdTutorials-MicroPython](https://randomnerdtutorials.com/getting-started-micropython-esp32-esp8266/)
3. [重要-中文-1Z MicroPython ESP32入門課](http://www.1zlab.com/wiki/micropython-esp32/pins-and-gpio/)
7. [MicroPython官方技術文件-EN](http://docs.micropython.org/en/latest/esp32/general.html)
8. [MicroPython翻譯技術文件-CN(星瞳科技)](https://docs.singtown.com/micropython/zh/latest/esp32/esp32/tutorial/index.html)
9. [Adafruit-MicroPython-LIVE](https://learn.adafruit.com/micropython-smart-holiday-lights/software)
10. [DFRobot-ESP32系列教程汇总](https://mc.dfrobot.com.cn/thread-271930-1-1.html)
11. [進階-完整課程1Z實驗室](http://www.1zlab.com/)
12. [進階-MicroPython 小車基本控制](https://github.com/maloyang/MicroPython-Car)
13. [模組參考-micro:bit全攻略-高師大教室](https://nkust.gitbook.io/micro-bit/micropython-chao-yin-bo-hcsr04)
14. [阿玉web:bit-MicroPython介紹](https://sites.google.com/site/wenyuwebbit/09-micropython-xie-zuo/03-kong-zhi-chang-yong-de-ying-ti)
15. [JIMI 陪你玩 ROBOT](https://jimirobot.tw/category/esp32micropython/)
16. DFRobot-[秦皇岛岛主](https://mc.dfrobot.com.cn/home.php?mod=space&uid=63899&do=thread&view=me&order=dateline&from=space&page=1)、gada888、沧海笑、[KIKI](https://mc.dfrobot.com.cn/thread-303185-1-1.html)、[網頁PWM控制LED](https://mc.dfrobot.com.cn/thread-25900-1-1.html)
24. [获取天气](https://mc.dfrobot.com.cn/thread-26029-1-1.html)[BLE](https://mc.dfrobot.com.cn/thread-302037-1-1.html)、[ble初体验](
https://mc.dfrobot.com.cn/thread-26317-1-1.html?fromuid=839413)、[HTTP Webserver](https://mc.dfrobot.com.cn/thread-274383-1-1.html)、[HTML](https://mc.dfrobot.com.cn/thread-274214-1-1.html?fromuid=839413)
* 軟體篇
1. [重要-Python 初學 1~4講](https://medium.com/ccclub/tagged/python-%E5%85%A5%E9%96%80)
18. [朝陽大學-唐元亮Python入門](http://yltang.net/tutorial/python/0/)
19. [重要-Python 3 教程-RUNOOB ](https://www.runoob.com/python3/python3-conditional-statements.html)
20. [重要-Mixly GUI microPython編程環境](https://mixly.readthedocs.io/zh_CN/latest/basic/02Installation-update.html#windows)
21. [重要-陳會安老師-Web Blockly for microPython/ESP8266](http://blockly.is-best.net/?fbclid=IwAR0uBr-Jxd8msuafx7elgUaoUst5QTpJEAo3c9uFwpdRUt3hN_-5kLPKFBE&i=2)
22. [HTTP METHOD解釋](https://blog.toright.com/posts/1203/%E6%B7%BA%E8%AB%87-http-method%EF%BC%9A%E8%A1%A8%E5%96%AE%E4%B8%AD%E7%9A%84-get-%E8%88%87-post-%E6%9C%89%E4%BB%80%E9%BA%BC%E5%B7%AE%E5%88%A5%EF%BC%9F.html)
23. [GitBook](http://tw.gitbook.net/python/python_quick_guide.html)
24. [政大-數據分析Python課程](http://moocs.nccu.edu.tw/course/123/intro)
* 影音篇
1. [重要-中文-清大資工謝旻錚教授-Scratch and Python](https://www.youtube.com/watch?v=DXhpMA0dMK8&list=PLj6E8qlqmkFuTOo4H19ZeOLPxZk1pOvQ2&index=15)
13. [重要-英文-MICROPYTHON ON ESP32 WITH Thonny-install](https://www.youtube.com/watch?v=lvmNLuHj25o&list=PL0SrfCGiNprTUxnsCDnIS4Y2DogPIOdwn)
14. [重要-英文-IOT with MicroPython by Using ESP32 & ESP8266 Step by Step](https://www.youtube.com/watch?v=eI2hnZOdLj8&list=PLOYsAys6a6mmt4_0zXXZ2_WzDLUkggGXC)
15. [德文-Micropython mit ESP32](https://www.youtube.com/watch?v=RUcm45J5mcg&list=PL4dxj1rGc3b3chUkad0Vuh2wDN-sRRJ_f)
16. [英文-Adafruit直播microPython使用教學](https://www.youtube.com/watch?v=6rYnWM-xdI4&list=PLjF7R1fz_OOXrI15wuXeESA0aA4VzcWSi&index=1)
17. [重要-PyCamera](http://www.xn--bnq31s.xn--fiqs8s/gitbook/upycraft_cn/4.6.1%20camera.py.html)
18. [重要-英文-MicroPython India](https://www.youtube.com/watch?v=elBtWZ_fOZU&list=PLw0SimokefZ3uWQoRsyf-gKNSs4Td-0k6&index=1)
19. [microPython Import介紹-名威科技](https://www.youtube.com/watch?v=PNV2hsE93X8)
---
## 1-1、材料包
| 品項 | 數量 | 備註 |
| - | - | - |
| [ESP32-DevKit(30Pins)](https://item.taobao.com/item.htm?spm=a1z0d.6639537.1997196601.222.3ee67484Ky8RxZ&id=544098298735) | 1 | 注意是30腳位DOIT開發板 |
|MicroUSB|1||
|母對母杜邦線 |10||
|RGB LED|1||
|蜂鳴器|1||
|超音波模組|1||
|WS2812模組|1||
----
## 1-2、ESP32認識
本次課程使用左下角DOIT ESP32
![](https://i.imgur.com/lPaVbja.jpg)
### IO介紹
![](https://i.imgur.com/UjI9NEA.png)
[Ref.Github](https://github.com/Nicholas3388/LuaNode)
* [委託設計NODEMCU-32S-非本上課用版本](https://www.shenzhen2u.com/NodeMCU-32S)
![](https://i.imgur.com/ChFQ4lV.png)
#### IO腳位功能
![IO腳位功能](https://i.imgur.com/PIATi1D.png)
– 雙核心 Tensilica 32 位元 LX6 微處理器
– 高達 240 MHz 時脈頻率
– 520 kB 內部 SRAM
– 28 個 GPIO
– 硬體加速加密(AES、SHA2、ECC、RSA-4096)
– 整合式 802.11 b/g/n Wi-Fi 收發器
– 整合式雙模藍牙v4.2 BR/EDR (傳統和 BLE)
– 支援 WiFi 802.11 b/g/n
– 支援 10 個電極電容式觸控
– 4 MB 快閃記憶體
-GPIO 34,35,36,39:Input only(不能作為輸出腳位)
-GPIO 0,6,7,8,9,10,11:系統用,勿使用(淺灰色標示)
-GPIO 18:重開機
* DHT11不可以用GPIO 5、26
* GPIO 12, 2燒錄時不可接任何裝置,請空接,燒錄完成後,再接回,否則會上傳失敗。
* WiFi啟動後,2,4,12,13,14,15,25,26,27僅能數位讀取,不可類比
參考自:[夜市小霸王](https://youyouyou.pixnet.net/blog/post/119410732)
---
### 開發板基本知識
#### 五分鐘了解開發板應用(I/O觀念)
{%youtube B4T8hzO0IYc %}
#### 十五分鐘了解microPython與Arduino差異(編/解譯器)
{%youtube m1miwCJtxeM %}
![](https://i.imgur.com/GEBUjUi.png)
---
#### 重要模組
![重要模組](https://i.imgur.com/NXkazO2.png)
[參考資料1](https://microcontrollerslab.com/esp32-pinout-use-gpio-pins/)
[參考資料2](https://circuits4you.com/2018/12/31/esp32-devkit-esp32-wroom-gpio-pinout/)
---
## 2-1、環境設置
* 詳細請[參考文本](https://randomnerdtutorials.com/getting-started-thonny-micropython-python-ide-esp32-esp8266/)/[影片](https://www.youtube.com/watch?v=lvmNLuHj25o&list=PL0SrfCGiNprTUxnsCDnIS4Y2DogPIOdwn)
1. micro-USB 連接 ESP32 與 USB port(NB、PC)-使用UART介面溝通
3. 安裝[Thonny IDE](https://thonny.org/)、[CP210x driver](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)
4. Tools-Options開啟設定![Tools-Options開啟設定](https://i.imgur.com/YnGF5CC.png)
5. 選擇開發板/COM port/韌體版本![選擇開發板/COM port/韌體版本!](https://i.imgur.com/d5Kb9Tx.png)
6. mpython下載最新韌體![](https://i.imgur.com/HPXxmeW.png)
7. 官網點選下載![](https://i.imgur.com/zqmtr8B.png)
8. 選擇ESP32 module![](https://i.imgur.com/oFaCSGG.png)
9. 選擇最新穩定且有支援BLE LAN的韌體版本 並下載![](https://i.imgur.com/AG2KnSe.png)
10. Port:選擇電腦認到這片開發板的COM port(可以去Windows裝置管理員看)
Firmwave:選擇剛下載好的最新版韌體
並點選安裝![](https://i.imgur.com/o7fPtaS.png)
![](https://i.imgur.com/6E7rmGv.png)
11. 第一次燒錄需要在燒錄過程出現___的時候按壓BOOT_button按鍵(約一秒)即可看到程式繼續燒錄
12. ![](https://i.imgur.com/1zk1hum.png)
13. 自動會第二次跑出視窗
![](https://i.imgur.com/XF4JbQu.png)
14. 並開始寫入韌體 會看到1%~100%的過程 需要約10sec
![](https://i.imgur.com/UALEVEP.png)
15. 燒錄完成後先按一次Stop
![](https://i.imgur.com/8M0nPl6.png)
16. 等待開發板重新開機啟動到下方Shell區有顯示>>> 就算完成 可以開始寫microPython了![](https://i.imgur.com/67eTJl0.png)
17. 為了方便記得開啟以下欄位,在View(檢視)-Files(檔案)、Variables(變數)![](https://i.imgur.com/NKG3S1z.png)
---
## 2-2、電路原理
### 基本迴路
![](https://lah.elearningontario.ca/CMS/public/exported_courses/SNC1P/exported/SNC1PU03/SNC1PU03/SNC1PU03A04/_images/wateranalogy.gif)
----
### 開發板硬體三核心
開發板使用方法
S = signal = 訊號
V = Vin = 輸入電壓(USB供電時為5V)
*3V3 = 3.3v*
G = GND = 接地
口訣:人要腳踩實地(G)先吃飯(V),才能接受指令做事(S)
----
#### 數位/類比訊號(Digital/Analog)
![](https://i.imgur.com/ljFXwre.png =400x)
---
## 3-1、mPython基本語法
* [查閱官方技術文件](http://docs.micropython.org/en/latest/)
![查閱官方技術文件](https://i.imgur.com/zuMlATS.png)
* [點選ESP32相關MicroPython語法](http://docs.micropython.org/en/latest/esp32/quickref.html)
![](https://i.imgur.com/th2A1Qa.png)
* 入門-終端機:單行指令
```
help('modules')
```
* 進階-Script腳本檔:複雜多行指令
![](https://i.imgur.com/sPPRoTn.png)
* 運算子-Mathematical operators
![](https://i.imgur.com/q63sYnp.png)
```
>>> 2+2*9-3
17
>>> 28594/2312
12.36765
>>> 214522236/7.5
2.860297e+07
>>> 23//2
11
>>> 25%3
1
```
* 關係運算子-Relational operators
![](https://i.imgur.com/Ylsncqc.png)
```
>>> 2 == 3
False
>>> 4 == 4
True
>>> 3 > 2
True
>>> 489808234 != 2223
True
>>> 4.5 >= 4.5
True
```
* 資料結構-Data types
![](https://i.imgur.com/zzdEmRv.png)
```
>>> a = 6
>>> b = 95.32
>>> c = 'Hello World!'
>>> d = True
```
* 印出-print() function
```
>>> print('LED is on')
LED is on
```
* 條件判斷-Conditional statements
```
if <expr1>:
<statement1>
elif <expr2>:
<statement2>
elif <expr3>:
<statement3>
(...)
else:
<statementn>
```
* <font color="#f00">Important:</font> Python’s standard indentation is **4 spaces**. **In MicroPython** indentation should be **only 2 spaces** to fit more code into the microcontroller memory.
* While and for loops
```
number = 1
while number <= 10:
print(number)
number = number + 1
print("over")
```
```
number = 1
for number in range(1, 11):
print(number)
print("over")
```
* User defined functions
```
def my_function(<arg1>, <arg2>, ...):
<statement>
(...)
return
```
```
def celsius_to_fahrenheit(temp_celsius):
temp_fahrenheit = temp_celsius * (9/5) + 32
return temp_fahrenheit
```
* Classes and objects
![](https://i.imgur.com/aFv4Xxb.png)
```
class MyClass:
(...)
```
```
class Person:
name = ""
age = 0
country = ""
def description(self):
print("%s is %d years old and he is from %s." %(self.name, self.age, self.country))
```
```
>>> person1 = Person()
```
```
>>> person1.name = "Rui"
>>> person1.age = 25
>>> person1.country = "Portugal"
```
```
>>> person1.description()
```
```
Rui is 25 years old and he is from Portugal.
```
![](https://i.imgur.com/NUz755g.png)
* Modules
```
#import module_name
import machine
from machine import Pin
```
### 個人淺見:寫程式學技能就像寫一張國小國文考卷
* ![](https://i.imgur.com/LuNvMpi.png)
* 第一大題 字音字形(基本語法 定義 宣告)
* 第二大題 字詞解釋(了解Function參數)
* 第三大題 改錯字(Debug)
* 第四大題 克漏字(選擇適合的Function)
* 第五大題 照樣造句(參考網路資源修改)
* 第六大題 造句(目標開發)
* 第七大題 作文(自行開發)
----
##### Level 1-變數與基本運算
終端機試打
1 + 1
print("OpenRobotClub")
print("OpenRobotClub" * 3)
print("OpenRobotClub" + "1+1")
Open = 100
print(Open)
Open = Open + 100
print(Open)
1 == 1 判斷是否等於 等於時回傳 True
2 == 1 判斷是否等於 不等於時回傳 False
可以嘗試!=
True False 屬於布林值
Open = "開"
print(Open)
##### Level 2-資料結構與轉換
數值型態:int, float, bool
字串型態:str, chr
容器型態:list, dict, tuple
* Casting 資料型態轉換()
``` floatNum = 55.0
intNum = int(floatNum)
print(floatNum)
print(intNum)
print(type(floatNum))
print(type(intNum))
```
* 字串轉整數
```stringNum = "55"
intNum = int(stringNum)
print(stringNum)
print(intNum)
print(type(stringNum))
print(type(intNum))
```
* 可以試試 str() 、 float() 、 chr() Function的轉換
##### Level 3-條件判斷
如果...就___
```
if condition:
statement
```
注意:前方有四個空格(mPython兩格)為縮排使用,此為Python特色必須要精準無誤
C語言不同有: {}、;、宣告方式
範例:
```
score = int(input("請輸入成績"))
if score >= 60:
print("成績及格!")
如果...就___否則___
if condition:
statement1 for True condition
else:
statement2 for False condition
```
巢狀if敘述(兩層迴圈)
```
ID = input()
year = int(ID[1:3])
if year < 4:
print("Graduated")
elif year <= 7 and year >= 4:
if year == 7:
print("Freshman")
elif year == 6:
print("Sophomore")
elif year == 5:
print("Junior")
elif year == 4:
print("Senior")
else:
print("Not Registered Yet")
```
---
## 3-2、[系統介紹](https://randomnerdtutorials.com/getting-started-thonny-micropython-python-ide-esp32-esp8266/)
* View->Add Variables, Files
* 系統先跑boot.py一次後,會一直重複執行main.py
* 若要創作離開電腦主機,純用Power Bank或電池供電,可以把程式命名成main.py
* D2腳位內建有一個LED在板上
* EN/RESET可以讓ESP32斷電重開
![](https://i.imgur.com/lE741QZ.png)
---
## 4-1、LED應用
![](https://i.imgur.com/IRaPOIt.png)
![](https://i.imgur.com/9F11uAS.png)
----
### 接線方法
![](https://i.imgur.com/UGtdpzk.png)
### RGB LED 介紹
![](https://www.mbeckler.org/microcontrollers/rgb_led/header.gif)
#### 共陰腳位
* 操作注意:
請把R接D4 G接D2 B接D15 -接GND
接腳金屬不能互相碰觸到會產生短路燒毀LED
![](https://i.imgur.com/Gy1pH1a.png)
----
### 基本控制方法(Digital)
```
from machine import Pin
p0 = Pin(0, Pin.OUT) # create output pin on GPIO0
p0.on() # set pin to "on" (high) level
p0.off() # set pin to "off" (low) level
p0.value(1) # set pin to on/high
p2 = Pin(2, Pin.IN) # create input pin on GPIO2
print(p2.value()) # get value, 0 or 1
p4 = Pin(4, Pin.IN, Pin.PULL_UP) # enable internal pull-up resistor
p5 = Pin(5, Pin.OUT, value=1) # set pin high on creation
```
### 進階控制方法(PWM)
![](https://i.imgur.com/5voJ8wy.png)
```
from machine import Pin, PWM
pwm0 = PWM(Pin(0)) # create PWM object from a pin
pwm0.freq() # get current frequency
pwm0.freq(1000) # set frequency
pwm0.duty() # get current duty cycle
pwm0.duty(200) # set duty cycle
pwm0.deinit() # turn off PWM on the pin
pwm2 = PWM(Pin(2), freq=20000, duty=512) # create and configure in one go
```
----
### 運行測試
* 操作注意:
| 接法 | Board | Device |
| -------- | -------- | -------- |
| Red | D4 | R |
| GND | GND | - |
| Green | D2 | G |
| Blue | D15 | B |
接腳金屬不能互相碰觸到會產生短路燒毀LED
1. 請嘗試點亮三種顏色 如範例:1_6
2. 請嘗試同時點亮兩(含以上)顆燈 如範例:1_7
3. 請嘗試試作紅綠燈,可包含長亮、閃爍、變燈
* Hint: 注意腳位宣告以及接線是否一致
---
## 4-2、內建觸摸電容
{%youtube ikD_3Vemkf0 %}
### 控制方法
```
from machine import TouchPad, Pin
t = TouchPad(Pin(14))
t.read() # Returns a smaller number when touched
```
----
### 運行測試
範例程式:2_1
---
## 4-3、內建溫度感測
### 控制方法
```
esp32.hall_sensor() # read the internal hall sensor
esp32.raw_temperature() # read the internal temperature of the MCU, in Farenheit
esp32.ULP() # access to the Ultra-Low-Power Co-processor
```
----
### 運行測試
範例程式:2_2
---
## 4-4、蜂鳴器
![](https://i.imgur.com/IJP2oYl.png =300x)
### 接線方法
![](https://i.imgur.com/lc6pmLl.png =300x)
----
### 控制方法
from machine import Pin, PWM
pwm2=PWM(Pin(2)) #建立 GPIO 2 的 PWM 物件
pwm2.freq(300) #設定 PWM 物件之頻率
pwm2.duty(512) #設定 PWM 物件之工作週期
PWM 方法 說明
freq([Hz]) 傳入 0~1000 設定方波頻率 **(決定音高)** , 否則為讀取
duty([cycle]) 傳入 0~1023 設定 Duty cycle (512 為 50%) **(決定音量)** , 否則為讀取
deinit() 關閉 PWM 功能
----
### 運行測試
範例程式:3_1 1KHz
範例程式:3_2 Alarm
範例程式:3_3 119
---
## 4-5、超音波
![](https://i.imgur.com/DSupIc4.png =200x)
### 接線方法
![](https://i.imgur.com/uFC6IS5.png =200x)
----
### 控制方法
匯入hcsr04.py到ESP32 microPython Device內
![](https://i.imgur.com/JCUbDwT.png =200x)
![](https://i.imgur.com/R3FDcue.png =200x)
![](https://i.imgur.com/5hoVT3n.png =200x)
![](https://i.imgur.com/f2nczKd.png =200x)
----
### 運行測試
範例程式:4_1
---
## 4-6、蜂鳴器x超音波綜合應用
----
### 接線方法
![](https://i.imgur.com/QfYsEw3.png =200x)
----
### 控制方法
移動手掌於兩個眼睛前方
----
### 運行測試
範例程式:4_2
---
## 4-7、[WS2812 RGB LED](https://makeryan.wordpress.com/2017/11/20/%E4%B8%80%E5%80%8B%E6%9C%8B%E5%8F%8B%E7%9A%84%E9%A1%98%E6%9C%9B-ws2812-5050-5v-led/)
----
### 接線方法
![](https://i.imgur.com/HzRCQaJ.png =2000x)
----
### 控制方法
```
from machine import Pin
from neopixel import NeoPixel
pin = Pin(0, Pin.OUT) # set GPIO0 to output to drive NeoPixels
np = NeoPixel(pin, 8) # create NeoPixel driver on GPIO0 for 8 pixels
np[0] = (255, 255, 255) # set the first pixel to white
np.write() # write data to all pixels
r, g, b = np[0] # get first pixel colour
```
----
### 運行測試
---
## 4-8、Wifi連線
![](https://i.imgur.com/L7s3cEp.png)
### 運行測試
範例程式:6_1_0
## 4-9、IFTTT設定
* Google搜尋IFTTT
![](https://i.imgur.com/8McFbjV.png)
* 自訂帳號或串接google gmail帳戶登入
![](https://i.imgur.com/5CoS1fm.png)
* 確認帳號登入後 點選上方導覽列的Create
![](https://i.imgur.com/1RhwA9G.png)
* 點選Add
![](https://i.imgur.com/zuiqPC7.png)
* 輸入webhooks
![](https://i.imgur.com/em2X1bA.png)
* 點選接收要求
![](https://i.imgur.com/pAtlRH7.png)
* 輸入觸發事件名稱 這裡用Touch做舉例
![](https://i.imgur.com/3U3Cwec.png)
* 設定觸發條件完成 接下來設定觸發後的行為
![](https://i.imgur.com/3SXOEna.png)
* 選擇LINE
![](https://i.imgur.com/Q8f7KdR.png)
* 選擇傳送訊息
![](https://i.imgur.com/wqApnPt.png)
* 會使用官方帳號Line Notify傳訊息
![](https://i.imgur.com/CeBU7Ot.png)
* 使用內網會被擋住 無法進入line網站確認 此時請使用測試網路或外網(手機分享之網路)
![](https://i.imgur.com/paQIoMc.png)
* 輸入Line 帳號 密碼 (帳號需用手機App綁定 教學在上方Line連結綁定Email)
![](https://i.imgur.com/vGmLUtY.png)
* 輸入用戶確認碼到手機LINE App
![](https://i.imgur.com/bBYVpUO.png)
*
![](https://i.imgur.com/v6QPWva.png)
* 設定資料欄或者是否同時傳送圖片(梗圖)
![](https://i.imgur.com/gcquFPg.png)
* 自行決定是否要放入梗圖(須提供.png .jpg等副檔名之URL)
![](https://i.imgur.com/ZUmfVut.jpg)
*
![](https://i.imgur.com/8vd76Wu.png)
*
![](https://i.imgur.com/zDNiESQ.png)
*
![](https://i.imgur.com/6t2f6ny.png)
![](https://i.imgur.com/xmzQeX0.png)
*
![](https://i.imgur.com/W4OsC9N.png)
*
![](https://i.imgur.com/4p0Cxh4.png)
---
## 4-10、IFTTT-Line Webhooks with Ultrasonic
Webhooks介紹
![](https://i.imgur.com/t6nQFcz.png)
----
### 接線方法
搭配超音波模組 進行觸發測試
![](https://i.imgur.com/uFC6IS5.png)
----
### 運行測試
範例程式:6_1_0
---
## 4-11、IFTTT-Google Sheet Webhooks
![](https://i.imgur.com/RoK3i3D.png)
![](https://i.imgur.com/zbuRo5l.png)
![](https://i.imgur.com/kFwgaRc.png)
![](https://i.imgur.com/rLUa0JN.png)
![](https://i.imgur.com/rerkAYq.png)
![](https://i.imgur.com/G3M8UiS.png)
![](https://i.imgur.com/BjIeUlA.png)
可再修正相關設定
![](https://i.imgur.com/zd8AT8o.png)
![](https://i.imgur.com/STAoQpE.png)
----
### 運行測試
* 可以觸摸D27腳位測試電容值差異
範例程式:6_3_0
---
## 4-12、IoT-Web Server in MicroPython
* 使用ESP32擔任網頁伺服器 設計開關按鈕
* 透過點選按鈕達到無線的控制效果
[操作影片](https://www.youtube.com/watch?v=i8b-ZM2VeeU&list=PLw0SimokefZ3uWQoRsyf-gKNSs4Td-0k6&index=16)
![](https://i.imgur.com/UCtMadA.png)
----
### 運行測試
[實作影片](https://www.youtube.com/watch?v=i8b-ZM2VeeU&list=PLw0SimokefZ3uWQoRsyf-gKNSs4Td-0k6&index=16)
* 須設定wifi_credentials.py檔案內的SSID 與 Password
* wifi_credentials.py存入MicroPython Device內(即ESP32內部空間)
* 筆電或桌機須與ESP32連結的網路,在同樣的子網域內
* 執行6_4_0webserver_sta_socket.py
* 並輸入network congif第一個IP到瀏覽器內
![](https://i.imgur.com/P06tdAw.png)
* 即會看到
![](https://i.imgur.com/CG6TGuR.png)
* 此時可以把6_4_0webserver_sta_socket.py另存新檔,檔名命名成main.py存入MicroPython Device內(即ESP32內部空間)
* 後續即可在連的上同樣區網的WIFI環境底搭配一般電源(電池、變壓器等)下,使用電腦、手機等裝置內的瀏覽器輸入IP達到控制ESP32 上 D2腳位的LED功能。
範例程式:6_4_0
### Web Server Tutorial
{%youtube GVMuER7A770 %}
#### [microcontrollers](https://microcontrollerslab.com/esp32-esp8266-micropython-web-server/)
#### [randomnerdtutorials](https://randomnerdtutorials.com/esp32-esp8266-micropython-web-server/)
![](https://i.imgur.com/zKyY3dS.png =200x)
---
## [課程問卷](http://gg.gg/n6x2d)
QR code
![](https://i.imgur.com/COpehxX.png =200x)
---
## Arduino vs. microPython
Arduino使用C语言编写,是没有命令行模式的,每次更改代码都需要重新编译,下载。
micropython是脚本语言,解释执行,可以执行文件,也可以命令行交互,在有线通信,无线通信,音视频,图像处理等方向比arduino方便很多倍。
由于当前高速cpu已经越来越廉价,比如8266能跑80M,160M,才十元钱,这在以前是无法想象的。所以硬件革命了,相应的软件使用方式会更多元,以前在PC上才能使用的功能和语言,以后直接可以在单片机上使用。
以前需要编写很多代码才能实现的功能,现在一两个命令就能实现了。(比如i2c扫描外部设备)目前micropython国内还处于起步阶段,后续应该会有一个长足的增长。所以,micropython相对arduino的优势:
1. 解释执行,不用编译
2. micropython可以集成更多高级功能,使用比C语言更便捷
3. 众多的外围库,和arduino一样方便操作外围硬件
4. 在高级功能领域在编程语言上有原生优势
5. 学习python语言更万金油,能做网站,能开发pc程序,能做测试,能做嵌入式等等,让您一门语言玩遍所有的东西。特别适合开源硬件领域,创客领域,教育领域。