from machine import Pin,PWM,I2C,Timer
import time,ssd1306,dht
Buzzer=PWM(Pin(13),freq=290,duty=128)#设置蜂鸣器的频率以及占空比
Buzzer.duty(0)#蜂鸣器关闭
#定义OLED屏幕显示器
i2c=I2C(0,scl=Pin(18),sda=Pin(19))#调用函数 设置I2C通信的管脚
oled_width=128
oled_height=64 #OLED屏的大小
oled=ssd1306.SSD1306_I2C(oled_width,oled_height,i2c) #调用类 告诉OLED屏用的通信
dak={0xE69C89: #"有" key键你的字符编码utf-8
[0x02,0x02,0xFF,0x04,0x04,0x0F,0x08,0x18,0x2F,0x48,0x88,0x0F,0x08,0x08,0x08,0x08,
0x00,0x00,0xFE,0x00,0x00,0xF0,0x10,0x10,0xF0,0x10,0x10,0xF0,0x10,0x10,0x50,0x20],
0xE4BABA: #"人" key键你的字符编码utf-8
[0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x04,0x04,0x08,0x08,0x10,0x20,0x40,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x08,0x04,0x02]
}
#定义一个汉字显示函数
def oled_dak(ch_str,x_pos,y_pos):
offset=0
for k in ch_str: #将中文变成16进制的编码值
code= 0x00 #0x1200 | 0x0045= 0x1245
data_code=k.encode("utf-8")
code |=data_code[0] <<16
code |=data_code[1] <<8
code |=data_code[2]
byte_data=dak[code] #通过key寻找里面的值
for y in range(0,16):
a_ = bin(byte_data[y]).replace('0b','')
while len(a_) <8:
a_ = '0'+a_
b_ = bin(byte_data[y+16]).replace('0b','')
while len(b_) <8:
b_ = '0'+b_
for x in range(0,8):
oled.pixel(x_pos + offset+x,y+y_pos,int(a_[x]))
oled.pixel(x_pos + offset+x+8,y+y_pos,int(b_[x]))
offset=offset+16
#定义红外线检测器
pir=Pin(15,Pin.IN)
def fun(tim):
print(pir.value())
return pir.value()
tim=Timer(0)#初始化定时器 ESP32有4个定时器0-3 0
tim.init(period=500,mode=Timer.PERIODIC,callback=fun)
while True:
if pir.value()==1:
Buzzer.duty(128)
Buzzer.freq(290)
time.sleep(0.5)
Buzzer.duty(0)
time.sleep(0.5)
oled.fill(0) #清屏
oled.text("",10,10)
oled.show()#开始显示
time.sleep(0.5)
oled.fill(0) #清屏
else:
oled.fill(0) #清屏
oled_dak("有人",10,10)
oled.show()#开始显示
time.sleep(0.5)
oled.fill(0) #清屏
#舵机转动
servo=PWM(Pin(4),freq=50,duty=0)
x=0
servo.duty(int((x/90+0.5)/20*1023))
while True:
x=270
servo.duty(int((x/90+0.5)/20*1023))
time.sleep=(0.2)
x=0
servo.duty(int((x/90+0.5)/20*1023))
time.sleep=(0.2)
#温湿度
data = dht.DHT22(Pin(15))
def Fun_DHT22():
data.measure()
global temp
temp=data.temperature()
global humi
humi =data.humidity()
print(temp)
print(humi)
while True:
Fun_DHT22()
time.sleep(0.5)
data=dht.DHT22(Pin(15)) #DHT22温湿度检测模块初始化管脚为15
i2c=I2C(0,scl=Pin(13),sda=Pin(12))#调用函数 设置I2C通信的管脚
oled_width=128
oled_height=64 #OLED屏的大小
oled=ssd1306.SSD1306_I2C(oled_width,oled_height,i2c) #调用类 告诉OLED屏用的通信
dak={0xE78E8B: #"李" key键你的字符编码utf-8
[0x00,0x7F,0x01,0x01,0x01,0x01,0x01,0x3F,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0x00,
0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00],
0xE68F90: #健
[0x10,0x11,0x11,0x11,0xFD,0x11,0x11,0x15,0x18,0x33,0xD0,0x11,0x11,0x11,0x52,0x24,
0x00,0xFC,0x04,0x04,0xFC,0x04,0x04,0xFC,0x00,0xFE,0x20,0x20,0x3C,0x20,0xA0,0x7E],
0xE5AE87: #荣
[0x02,0x01,0x7F,0x40,0x80,0x3F,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x01,0x05,0x02,
0x00,0x00,0xFE,0x02,0x04,0xF8,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00],
0xE78EAE: #刘
[0x00,0x00,0xFC,0x13,0x10,0x10,0x11,0x7C,0x10,0x13,0x10,0x10,0x1C,0xE0,0x40,0x00,
0x40,0x40,0x40,0xFE,0x40,0x40,0xFC,0x40,0x40,0xFE,0x42,0x42,0x4A,0x44,0x40,0x40],
0xE7909B: #彤
[0x00,0x07,0xFC,0x24,0x21,0x22,0x20,0xF8,0x27,0x20,0x20,0x39,0xE2,0x4C,0x00,0x00,
0x00,0xFC,0x04,0xA4,0x10,0x08,0x40,0x40,0xFC,0x40,0xE0,0x50,0x48,0x46,0x40,0x40],
0xE982A2: #王
[0x00,0x7F,0x12,0x12,0x12,0x12,0x12,0xFF,0x12,0x12,0x12,0x12,0x22,0x22,0x42,0x82,
0x00,0xBE,0x22,0x24,0x24,0x28,0x24,0xE4,0x22,0x22,0x22,0x34,0x28,0x20,0x20,0x20],
0xE799BB: #恣
[0x00,0x3E,0x02,0x24,0x14,0x08,0x17,0x20,0xDF,0x10,0x10,0x1F,0x08,0x04,0x7F,0x00,
0x80,0x90,0xA4,0x48,0x50,0x20,0xD0,0x08,0xF6,0x10,0x10,0xF0,0x20,0x40,0xFC,0x00],
0xE5B885: #懿
[0x08,0x08,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x09,0x11,0x10,0x20,0x40,
0x20,0x20,0x20,0x20,0xFC,0x24,0x24,0x24,0x24,0x24,0x24,0x34,0x28,0x20,0x20,0x20],
#没改
0xE8AEB8: #展
[0x00,0x20,0x10,0x11,0x01,0x02,0xF0,0x10,0x13,0x10,0x10,0x10,0x14,0x18,0x10,0x00,
0x80,0x80,0x80,0xFC,0x20,0x20,0x20,0x20,0xFE,0x20,0x20,0x20,0x20,0x20,0x20,0x20],
0xE4BCA0: #文
[0x08,0x08,0x08,0x13,0x10,0x30,0x37,0x50,0x91,0x13,0x10,0x11,0x10,0x10,0x10,0x10,
0x40,0x40,0x40,0xF8,0x40,0x80,0xFE,0x80,0x00,0xF8,0x08,0x10,0xA0,0x40,0x20,0x20],
0xE5AF8C: #倩
[0x02,0x01,0x7F,0x40,0xBF,0x00,0x1F,0x10,0x1F,0x00,0x3F,0x21,0x3F,0x21,0x3F,0x20,
0x00,0x00,0xFE,0x02,0xFC,0x00,0xF0,0x10,0xF0,0x00,0xF8,0x08,0xF8,0x08,0xF8,0x08],
0xE69CB1: #张
[0x01,0x11,0x11,0x1F,0x21,0x41,0x01,0xFF,0x03,0x05,0x09,0x11,0x21,0xC1,0x01,0x01,
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xFE,0x80,0x40,0x20,0x10,0x08,0x06,0x00,0x00],
0xE587AF: #云
[0x10,0x92,0x92,0x92,0xFE,0x00,0xFE,0x02,0x02,0x7E,0x40,0x40,0x46,0x59,0x61,0x02,
0x00,0xF0,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x92,0x92,0x12,0x0E,0x00],
0xE5BCA0: #霞
[0x01,0xF9,0x09,0x09,0x09,0x79,0x41,0x47,0x41,0x79,0x09,0x09,0x09,0x09,0x51,0x21,
0x00,0x08,0x08,0x10,0x20,0x40,0x00,0xFE,0x40,0x20,0x20,0x10,0x08,0x44,0x82,0x00],
0xE6B8A9: #温
[0x00,0x23,0x12,0x12,0x83,0x42,0x42,0x13,0x10,0x27,0xE4,0x24,0x24,0x24,0x2F,0x00,
0x00,0xF8,0x08,0x08,0xF8,0x08,0x08,0xF8,0x00,0xFC,0xA4,0xA4,0xA4,0xA4,0xFE,0x00],
0xE5BAA6: #度
[0x01,0x00,0x3F,0x22,0x22,0x3F,0x22,0x22,0x23,0x20,0x2F,0x24,0x42,0x41,0x86,0x38,
0x00,0x80,0xFE,0x20,0x20,0xFC,0x20,0x20,0xE0,0x00,0xF0,0x10,0x20,0xC0,0x30,0x0E],
0xE6B9BF: #湿
[0x00,0x27,0x14,0x14,0x87,0x44,0x44,0x17,0x11,0x21,0xE9,0x25,0x23,0x21,0x2F,0x00,
0x00,0xF8,0x08,0x08,0xF8,0x08,0x08,0xF8,0x20,0x20,0x24,0x28,0x30,0x20,0xFE,0x00],
0xE69C80: #最
[0x1F,0x10,0x1F,0x10,0x1F,0x00,0xFF,0x22,0x3E,0x22,0x3E,0x22,0x2F,0xF2,0x42,0x03,
0xF0,0x10,0xF0,0x10,0xF0,0x00,0xFE,0x00,0xF8,0x88,0x90,0x50,0x20,0x50,0x88,0x06],
0xE5A4A7: #大
[0x01,0x01,0x01,0x01,0x01,0xFF,0x01,0x01,0x02,0x02,0x04,0x04,0x08,0x10,0x20,0xC0,
0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x80,0x80,0x40,0x40,0x20,0x10,0x08,0x06],
0xE580BC: #值
[
0x08,0x08,0x0F,0x10,0x10,0x33,0x32,0x53,0x92,0x13,0x12,0x13,0x12,0x12,0x1F,0x10,
0x40,0x40,0xFC,0x40,0x40,0xF8,0x08,0xF8,0x08,0xF8,0x08,0xF8,0x08,0x08,0xFE,0x00],
0xE5B08F: #小
[
0x01,0x01,0x01,0x01,0x01,0x11,0x11,0x11,0x21,0x21,0x41,0x81,0x01,0x01,0x05,0x02,
0x00,0x00,0x00,0x00,0x00,0x10,0x08,0x04,0x04,0x02,0x02,0x02,0x00,0x00,0x00,0x00]
}
#定义一个汉字显示函数
def oled_dak(ch_str,x_pos,y_pos):
offset=0
for k in ch_str: #将中文变成16进制的编码值
code= 0x00 #0x1200 | 0x0045= 0x1245
data_code=k.encode("utf-8")
code |=data_code[0] <<16
code |=data_code[1] <<8
code |=data_code[2]
byte_data=dak[code] #通过key寻找里面的值
for y in range(0,16):
a_ = bin(byte_data[y]).replace('0b','')
while len(a_) <8:
a_ = '0'+a_
b_ = bin(byte_data[y+16]).replace('0b','')
while len(b_) <8:
b_ = '0'+b_
for x in range(0,8):
oled.pixel(x_pos + offset+x,y+y_pos,int(a_[x]))
oled.pixel(x_pos + offset+x+8,y+y_pos,int(b_[x]))
offset=offset+16
def oled_wenshidushow():
data.measure()#测量获取温湿度
global temp #定义全局变量
temp=data.temperature()
global humi
humi=data.humidity()
oled.fill(0) #清屏
oled_dak("温度",1,6)
oled.text(str(temp),50,6)
#oled.text("temperature:"+str(temp),1,6) #将word显示在横坐标为6,纵坐标为6的位置上
oled.text("MAX:40",1,22)
oled.text("MIN:20",61,22)
oled_dak("湿度",1,35)
oled.text(str(humi),50,35)
#oled.text("humidity:"+str(humi),1,35) #将word显示在横坐标为1,纵坐标为30的位置上
oled.text("MAX:40",1,50)
oled.text("MIN:20",61,50)
oled.show()#开始显示
time.sleep(50)
def ChinaShow():
oled.fill(0) #清屏
oled_dak("李健荣",1,10)
oled.text(str(2103210129),50,10)
oled.show()#开始显示
time.sleep(1)
oled.fill(0) #清屏
oled_dak("刘彤",1,10)
oled.text(str(2103210130),50,10)
oled.show()#开始显示
time.sleep(1)
oled.fill(0) #清屏
oled_dak("王恣懿",1,10)
oled.text(str(2103210132),50,10)
oled.show()#开始显示
time.sleep(1)
oled.fill(0) #清屏
oled_dak("展文倩",1,10)
oled.text(str(2103210133),50,10)
oled.show()#开始显示
time.sleep(1)
oled.fill(0) #清屏
oled_dak("张云霞",1,10)
oled.text(str(2103210137),50,10)
oled.show()#开始显示
time.sleep(1)
oled.fill(0) #清屏
ChinaShow()
while True:
oled_wenshidushow()