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