觸摸控制
下面介紹如何外部地控制燈的亮滅,我采用esp32里面的觸摸按鍵資源,實(shí)現(xiàn)觸摸控制開(kāi)關(guān),一摸燈就亮。先上代碼:
from machine import TouchPad, Pin #引入touchpad模塊
from time import sleep
led = Pin(12,Pin.OUT) #在12腳外接一個(gè)led燈,也可利用板子自帶led
touch_pin = TouchPad(Pin(14)) #定義14腳為觸摸腳
while True:
touch_value = touch_pin.read()
print(touch_value) #打印出14腳感應(yīng)的值
if touch_value > 500 : #若讀取的值大于閥值,則為沒(méi)觸摸
led.value(0)
else:
led.value(1) #觸摸則燈亮
sleep(0.5) #延時(shí)0.5秒,實(shí)現(xiàn)每0.5秒判斷一次觸摸狀態(tài)
其實(shí)很簡(jiǎn)單的,如果看過(guò)我的前兩節(jié),這個(gè)代碼都不需要解釋,就是多引入了一個(gè)Touchpad模塊,然后把14腳定義為觸摸腳。在主循環(huán)中,sleep(0.5)定義了每0.5秒就讀取一次14腳的數(shù)據(jù),然后通過(guò)串口打印出來(lái),在upycraft下面的框應(yīng)該能看到每0.5秒出現(xiàn)一個(gè)值,通過(guò)對(duì)比觸摸14腳與否的數(shù)值自己定義閥值,用于if函數(shù)的判斷,實(shí)現(xiàn)觸摸控制。
若熟悉了代碼,完全可以升級(jí)一下代碼實(shí)現(xiàn)雙穩(wěn)態(tài)控制,即摸一下就可以改變燈的亮滅;或再升級(jí)一下實(shí)現(xiàn)雙擊或長(zhǎng)按等功能,然后與前面的呼吸跑馬燈結(jié)合起來(lái),就很酷了。
這講的觸摸控制跟按鍵控制實(shí)現(xiàn)的效果一模一樣,只是我覺(jué)得按鍵太簡(jiǎn)單,觸摸好玩一點(diǎn)哈哈。
附上esp32的引腳圖:
可以看到我的14引腳不是亂設(shè)的,esp32的引腳只有8個(gè)支持touch,就是上面的T0-T7,我們還可以發(fā)現(xiàn)有各種AD、DA、SD等功能,等著你去玩耍。
ADC
下面我們來(lái)看一個(gè)有趣的ADC實(shí)驗(yàn),即模擬和數(shù)字的轉(zhuǎn)換。效果是通過(guò)旋轉(zhuǎn)電位器從而控制燈的亮度,這是呼吸燈的升級(jí)版:
from machine import Pin, PWM, ADC #引入ADC模塊
from time import sleep
frequency = 5000
led = PWM(Pin(12), frequency)
pot = ADC(Pin(34)) #定義34腳為ADC腳,可以讀取模擬電壓
pot.width(ADC.WIDTH_12BIT) #讀取的電壓轉(zhuǎn)為0-4096
pot.atten(ADC.ATTN_11DB) #輸入電壓0-3.3v
while True:
pot_value = pot.read() //4 #使讀取的電壓變?yōu)?-1024
print(pot_value) #打印出讀取到的電壓以便調(diào)試
if pot_value < 15:
led.duty(0)
else:
led.duty(pot_value) #通過(guò)讀取電位器的電壓調(diào)節(jié)燈的占空比
sleep(0.1) #每100ms讀取一次
代碼我相信不需要多說(shuō)了,有很多是呼吸燈的程序粘貼過(guò)來(lái)的,看我的注釋肯定能懂的。面包板上將電位器的兩端接3.3v和GND后,把中間的引腳接到esp32的34腳,然后再在12腳外接個(gè)led,搞定!原理是通過(guò)讀取0-3.3v的電壓,將其轉(zhuǎn)換為0-4096的數(shù)字,實(shí)現(xiàn)模數(shù)的轉(zhuǎn)換,因?yàn)閘ed的pwm輸出占空比范圍是0-1024(上一講呼吸燈談過(guò)),所以將讀取的值除以4,剛好,直接定義為燈的占空比,這即是數(shù)模轉(zhuǎn)換,小小十幾行代碼把ADC都囊括了。
綜合前面幾講,可以完成一個(gè)好玩的項(xiàng)目:用觸摸感應(yīng)控制3盞燈的依次點(diǎn)亮,一次只亮一盞,且是呼吸燈的形式,然后一旁有個(gè)電位器,它可以調(diào)節(jié)呼吸燈的呼吸速度。 相信你可以很快寫出這個(gè)項(xiàng)目的代碼。
附上其他文章的鏈接:
《吃白菜一樣用micropython玩esp32(一)—— 搭建環(huán)境》
《吃白菜一樣用micropython玩esp32(二)—— 點(diǎn)燈大師》
《吃白菜一樣用micropython玩esp32(四)—— siri遠(yuǎn)程控制點(diǎn)燈》