品項 | 數量 | 備註 |
---|---|---|
ESP32-DevKit(30Pins) | 1 | 注意是30腳位DOIT開發板 |
MicroUSB | 1 | |
母對母杜邦線 | 10 | |
RGB LED | 1 | |
蜂鳴器 | 1 | |
超音波模組 | 1 | |
WS2812模組 | 1 |
本次課程使用左下角DOIT ESP32
– 雙核心 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:重開機
Learn More →
Learn More →
micro-USB 連接 ESP32 與 USB port(NB、PC)-使用UART介面溝通
Tools-Options開啟設定
選擇開發板/COM port/韌體版本
mpython下載最新韌體
官網點選下載
選擇ESP32 module
選擇最新穩定且有支援BLE LAN的韌體版本 並下載
Port:選擇電腦認到這片開發板的COM port(可以去Windows裝置管理員看)
Firmwave:選擇剛下載好的最新版韌體
並點選安裝
第一次燒錄需要在燒錄過程出現___的時候按壓BOOT_button按鍵(約一秒)即可看到程式繼續燒錄
自動會第二次跑出視窗
並開始寫入韌體 會看到1%~100%的過程 需要約10sec
燒錄完成後先按一次Stop
等待開發板重新開機啟動到下方Shell區有顯示>>> 就算完成 可以開始寫microPython了
為了方便記得開啟以下欄位,在View(檢視)-Files(檔案)、Variables(變數)
開發板使用方法
S = signal = 訊號
V = Vin = 輸入電壓(USB供電時為5V)
3V3 = 3.3v
G = GND = 接地
口訣:人要腳踩實地(G)先吃飯(V),才能接受指令做事(S)
help('modules')
>>> 2+2*9-3
17
>>> 28594/2312
12.36765
>>> 214522236/7.5
2.860297e+07
>>> 23//2
11
>>> 25%3
1
>>> 2 == 3
False
>>> 4 == 4
True
>>> 3 > 2
True
>>> 489808234 != 2223
True
>>> 4.5 >= 4.5
True
>>> a = 6
>>> b = 95.32
>>> c = 'Hello World!'
>>> d = True
>>> print('LED is on')
LED is on
if <expr1>:
<statement1>
elif <expr2>:
<statement2>
elif <expr3>:
<statement3>
(...)
else:
<statementn>
number = 1
while number <= 10:
print(number)
number = number + 1
print("over")
number = 1
for number in range(1, 11):
print(number)
print("over")
def my_function(<arg1>, <arg2>, ...):
<statement>
(...)
return
def celsius_to_fahrenheit(temp_celsius):
temp_fahrenheit = temp_celsius * (9/5) + 32
return temp_fahrenheit
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.
#import module_name
import machine
from machine import Pin
終端機試打
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)
數值型態:int, float, bool
字串型態:str, chr
容器型態:list, dict, tuple
intNum = int(floatNum)
print(floatNum)
print(intNum)
print(type(floatNum))
print(type(intNum))
intNum = int(stringNum)
print(stringNum)
print(intNum)
print(type(stringNum))
print(type(intNum))
如果…就___
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")
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
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
Learn More →
from machine import TouchPad, Pin
t = TouchPad(Pin(14))
t.read() # Returns a smaller number when touched
範例程式:2_1
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
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
匯入hcsr04.py到ESP32 microPython Device內
範例程式:4_1
移動手掌於兩個眼睛前方
範例程式:4_2
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
範例程式:6_1_0
*
*
*
*
Webhooks介紹
搭配超音波模組 進行觸發測試
範例程式:6_1_0
可再修正相關設定
範例程式:6_4_0
Learn More →
QR code
Arduino使用C语言编写,是没有命令行模式的,每次更改代码都需要重新编译,下载。
micropython是脚本语言,解释执行,可以执行文件,也可以命令行交互,在有线通信,无线通信,音视频,图像处理等方向比arduino方便很多倍。
由于当前高速cpu已经越来越廉价,比如8266能跑80M,160M,才十元钱,这在以前是无法想象的。所以硬件革命了,相应的软件使用方式会更多元,以前在PC上才能使用的功能和语言,以后直接可以在单片机上使用。
以前需要编写很多代码才能实现的功能,现在一两个命令就能实现了。(比如i2c扫描外部设备)目前micropython国内还处于起步阶段,后续应该会有一个长足的增长。所以,micropython相对arduino的优势: