ESP32 RGB點(diǎn)陣+多功能顯示+可交互超聲波云臺
本程序通過LCD1602顯示濕度和距離數(shù)據(jù)。超聲波云臺在超聲波傳感器檢測到距離小于15厘米時(shí)順時(shí)針轉(zhuǎn)動,距離大于15厘米時(shí)逆時(shí)針轉(zhuǎn)動實(shí)現(xiàn)交互。WS2812點(diǎn)陣每320ms顯示隨機(jī)顏色(每個(gè)燈的顏色分開取值),通過五向?qū)Ш桨存I控制亮度和開關(guān)。文章來源:http://www.zghlxwxcb.cn/news/detail-514597.html
代碼如下文章來源地址http://www.zghlxwxcb.cn/news/detail-514597.html
'''
舵機(jī)-->(22)
(Trig)-->(5)
(Echo)-->(18)
SCL-->16
SDA-->17
DS-->27
WS-->(13)
'''
#導(dǎo)入Pin模塊
from machine import Pin
import time
from servo import Servo
from machine import Timer
from hcsr04 import HCSR04
from neopixel import NeoPixel
import random
from machine import ADC
from machine import Pin,I2C
from i2c_lcd import I2cLcd
import dht
#定義HCSR04控制對象
hcsr04=HCSR04(trigger_pin=5, echo_pin=18)
#定義SG90舵機(jī)控制對象
servo = Servo(Pin(22))
#定義DHT22控制對象
dht22=dht.DHT22(Pin(27))
#定義RGB控制對象
#控制引腳為13,RGB燈串聯(lián)5個(gè)
pin=13
rgb_num=64
rgb_led=NeoPixel(Pin(pin,Pin.OUT),rgb_num)
# LCD 1602 I2C 地址
DEFAULT_I2C_ADDR = 0x27
# 初始化GPIO口
# def setup():
# global lcd
i2c = I2C(1,sda=Pin(17),scl=Pin(16),freq=400000)
lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16) # 初始化(設(shè)備地址, 背光設(shè)置)
#定義按鍵控制對象
key1=Pin(12,Pin.IN,Pin.PULL_UP)
key2=Pin(14,Pin.IN,Pin.PULL_UP)
key3=Pin(26,Pin.IN,Pin.PULL_UP)
key4=Pin(25,Pin.IN,Pin.PULL_UP)
key5=Pin(33,Pin.IN,Pin.PULL_UP)
key6=Pin(32,Pin.IN,Pin.PULL_UP)
key_en=1
#按鍵掃描函數(shù)
def key_scan():
global key_en
if key_en==1 and (key1.value()==0 or key2.value()==0 or key3.value()==0 or key4.value()==0 or
key5.value()==0 or key6.value()==0 ):
time.sleep_ms(10)
key_en=0
if key1.value()==0:
return 1
elif key2.value()==0:
return 2
elif key3.value()==0:
return 3
elif key4.value()==0:
return 4
elif key5.value()==0:
return 5
elif key6.value()==0:
return 6
elif (key1.value()==1 and key2.value()==1 and key3.value()==1 and key4.value()==1 and
key5.value()==1 and key6.value()==1 ) :
key_en=1
return 0
brightness=18
delay=40
mode=1
def key_get(): #獲取鍵值并改變變量的值
global brightness
global delay
global mode
key=key_scan()
if key==1 and brightness<60 :
brightness+=6
elif key==2 and brightness>6 :
brightness-=6
elif key==3 and delay<90 :
delay+=10
elif key==4 and delay>10 :
delay-=10
elif key==5 and mode<1 :
mode+=1
elif key==6 and mode>0 :
mode-=1
b=0
c=120
g=0
h=0
humi=99
k=0
l=0
m=0
servo.write_angle(c)
#定時(shí)器0中斷函數(shù)
def time0_irq(time0):
global b
global c
global g
global h
global k
global l
global m
global humi
global brightness
global delay
global mode
key_get()
distance=hcsr04.distance_cm()
if distance>15 and c<=120:
c+=2
servo.write_angle(c)
if distance<15 and distance>=0 and c>=60:
c-=2
servo.write_angle(c)
g+=1
m+=1
if g==8 : #每8個(gè)周期RGB燈隨機(jī)變色,屏幕刷新
g=0
if mode==1 :
for i in range(rgb_num):
d=random.randint(0,brightness)
e=random.randint(0,brightness)
f=random.randint(0,brightness)
rgb_led[i]=(d, e, f)
rgb_led.write()
if mode==0 :
for i in range(rgb_num):
rgb_led[i]=(0, 0, 0)
rgb_led.write()
lcd.putstr("humidity=%.1f"%humi)
lcd.putstr("% ")
lcd.putstr("distance=%3d"%distance)
lcd.putstr("cm ")
if m==45: #每45個(gè)周期測量濕度
m=0
dht22.measure() #調(diào)用DHT類庫中測量數(shù)據(jù)的函數(shù)
humi = dht22.humidity()
#程序入口
if __name__=="__main__":
time0=Timer(0) #創(chuàng)建time0定時(shí)器對象
time0.init(period=40,mode=Timer.PERIODIC,callback=time0_irq)
while True:
pass
到了這里,關(guān)于ESP32(MicroPython) RGB點(diǎn)陣+多功能顯示+可交互超聲波云臺的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!