from machine import Pin, PWM, I2C
import time
import struct
import servo
from ir_rx import NEC_16
from ssd1306 import SSD1306_I2C
global ir_data
global ir_addr
pwm = servo.Servo(9)
pir_sensor = Pin(2, Pin.IN)
buzzer = PWM(Pin(10, Pin.OUT) )
relay = Pin(6, Pin.OUT)
relay.off()
def buzz():
buzzer.freq(1000)
buzzer.duty_u16(32768)
time.sleep(0.1)
buzzer.duty_u16(0)
i2c = I2C(1, scl=Pin(27), sda=Pin(26))
mpu_addr = 0x68
i2c2 = I2C(0, sda=Pin(16), scl=Pin(21), freq=400000)
oled = SSD1306_I2C(128, 64, i2c2)
oled.text("Hello Anirudh", 0, 0)
oled.show()
def ir_callback(data, addr, ctrl):
global ir_data
global ir_addr
if data > 0:
ir_data = data
ir_addr = addr
print('Data {:02x} Addr {:04x}'.format(data, addr))
ir = NEC_16(Pin(11, Pin.IN), ir_callback)
ir_data = 0
ir_addr = 0
def read_mpu():
data = i2c.readfrom_mem(mpu_addr, 0x3B, 14)
ax, ay, az = struct.unpack('>hhh', data[0:6])
return ax, ay, az
data = None
try:
while True:
if pir_sensor.value():
buzz()
relay.on()
pwm.move(90)
else:
relay.off()
pwm.move(0)
if ir_data > 0:
print(ir_data)
data = ir_data
ir_data = 0
ax, ay, az = read_mpu()
oled.fill(0)
print(ax,ay,az)
if data:
oled.text(f"IR DATA: {data}",0,0)
oled.text(f"x: {str(ax)}",0, 10)
oled.text(f"y: {str(ay)}",0, 20)
oled.text(f"z: {str(az)}",0, 30)
oled.show()
time.sleep(1)
except KeyboardInterrupt:
relay.off()