加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 觸摸控制
    • ADC
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

吃白菜一樣用micropython玩esp32(三)—— 觸摸按鍵、ADC

03/16 16:11
2740
閱讀需 6 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

觸摸控制

下面介紹如何外部地控制燈的亮滅,我采用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)燈》

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
MOCD207R2M 1 Fairchild Semiconductor Corporation Transistor Output Optocoupler, 2-Element, 2500V Isolation, LEAD FREE, PLASTIC, SOIC-8
$1.16 查看
DS24B33S+T&R 1 Maxim Integrated Products EEPROM, 4KX1, Serial, CMOS, PDSO8, 0.208 INCH, ROHS COMPLIANT, SOP-8
$2.75 查看
AFBR-5715APZ 1 Broadcom Limited Transceiver, 830nm Min, 860nm Max, 1250Mbps(Tx), LC Connector, Panel Mount, ROHS COMPLIANT
暫無(wú)數(shù)據(jù) 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜