from machine import Pin, SoftI2C, PWM
from utime import sleep, sleep_us, ticks_us, sleep_ms
from i2c_lcd import I2cLcd
from servo import Servo
import urequests
import math
import time
import network
import utelegram
from dht import DHT22
from ssd1306 import SSD1306_I2C
wifi=network.WLAN(network.STA_IF)
i2c = SoftI2C(sda=Pin(21), scl=Pin(22))
display = SSD1306_I2C(128, 64, i2c)
music=PWM(Pin(14))
music.duty(0)
i2c = SoftI2C(sda=Pin(21), scl=Pin(22))
lcd = I2cLcd(i2c, 0x27, 4, 20)
servo1 = Servo(19)
servo1.write_angle(0)
trigger1 = Pin(32, Pin.OUT)
echo1 = Pin(33, Pin.IN)
led = Pin(12, Pin.OUT)
weather = DHT22(Pin(25))
door = 'Close'
def door_open(message):
global door
servo.write_angle(180)
door = 'Open'
bot.send(message['message']['chat']['id'], f'Door is {door}!')
def status(message):
global door
def show_text(message):
lcd.clear()
lcd.putstr(message['message']['text'])
bot.send(message['message']['chat']['id'], 'Ok!')
def ultra(trigger, echo):
trigger.off()
sleep_us(2)
trigger.on()
sleep_us(5)
trigger.off()
while echo.value() == 0:
signal_off = ticks_us()
while echo.value() == 1:
signal_on = ticks_us()
try:
time_pass = signal_on - signal_off
except NameError:
return 0
return time_pass/58
def check_distance(message):
distance = ultra(trigger1, echo1)
bot.send(message['message']['chat']['id'], f'Distance to object: {distance:.1f}cm')
def led_on(message):
led.on()
bot.send(message['message']['chat']['id'], 'Led is ON!')
def led_off(message):
led.off()
bot.send(message['message']['chat']['id'], 'Led is OFF!')
def bear(message):
display.poweron()
display.text('Bear', 0, 0)
#line_1
display.pixel(50,30,1)
display.pixel(51,30,1)
display.pixel(52,30,1)
display.pixel(53,30,1)
display.pixel(74,30,1)
display.pixel(75,30,1)
display.pixel(76,30,1)
display.pixel(77,30,1)
#line_2
display.pixel(49,31,1)
display.pixel(48,31,1)
display.pixel(54,31,1)
display.pixel(72,31,1)
display.pixel(73,31,1)
display.pixel(78,31,1)
display.pixel(79,31,1)
#line_3
display.pixel(47,32,1)
display.pixel(55,32,1)
display.pixel(57,32,1)
display.pixel(58,32,1)
display.pixel(59,32,1)
display.pixel(60,32,1)
display.pixel(61,32,1)
display.pixel(62,32,1)
display.pixel(63,32,1)
display.pixel(64,32,1)
display.pixel(65,32,1)
display.pixel(67,32,1)
display.pixel(68,32,1)
display.pixel(69,32,1)
display.pixel(71,32,1)
display.pixel(80,32,1)
#line_4
display.pixel(46,33,1)
display.pixel(56,33,1)
display.pixel(70,33,1)
display.pixel(81,33,1)
#line_5
display.pixel(46,34,1)
display.pixel(81,34,1)
#line_6
display.pixel(45,35,1)
display.pixel(82,35,1)
#line_7
display.pixel(45,36,1)
display.pixel(82,36,1)
#line_8
display.pixel(45,37,1)
display.pixel(82,37,1)
#line_9
display.pixel(45,38,1)
display.pixel(82,38,1)
#line_10
display.pixel(46,39,1)
display.pixel(53,39,1)
display.pixel(74,39,1)
display.pixel(81,39,1)
#line_11
display.pixel(46,40,1)
display.pixel(52,40,1)
display.pixel(75,40,1)
display.pixel(81,40,1)
#line_12
display.pixel(47,41,1)
display.pixel(51,41,1)
display.pixel(63,41,1)
display.pixel(67,41,1)
display.pixel(76,41,1)
display.pixel(80,41,1)
#line_13
display.pixel(48,42,1)
display.pixel(49,42,1)
display.pixel(51,42,1)
display.pixel(62,42,1)
display.pixel(63,42,1)
display.pixel(67,42,1)
display.pixel(68,42,1)
display.pixel(76,42,1)
display.pixel(78,42,1)
display.pixel(79,42,1)
#line_14
display.pixel(50, 43,1)
display.pixel(78, 43,1)
#line_15
display.pixel(50, 44,1)
display.pixel(78, 44,1)
#line_16
display.pixel(49, 45,1)
display.pixel(50, 45,1)
display.pixel(51, 45,1)
display.pixel(52, 45,1)
display.pixel(53, 45,1)
display.pixel(54, 45,1)
display.pixel(64, 45,1)
display.pixel(65, 45,1)
display.pixel(66, 45,1)
display.pixel(74, 45,1)
display.pixel(75, 45,1)
display.pixel(76, 45,1)
display.pixel(77, 45,1)
display.pixel(78, 45,1)
display.pixel(79, 45,1)
#line_17
display.pixel(47, 46,1)
display.pixel(48, 46,1)
display.pixel(55, 46,1)
display.pixel(63, 46,1)
display.pixel(64, 46,1)
display.pixel(65, 46,1)
display.pixel(66, 46,1)
display.pixel(67, 46,1)
display.pixel(68, 46,1)
display.pixel(73, 46,1)
display.pixel(80, 46,1)
display.pixel(81, 46,1)
#line_18
display.pixel(46, 47,1)
display.pixel(57, 47,1)
display.pixel(62, 47,1)
display.pixel(63, 47,1)
display.pixel(64, 47,1)
display.pixel(65, 47,1)
display.pixel(66, 47,1)
display.pixel(67, 47,1)
display.pixel(68, 47,1)
display.pixel(72, 47,1)
display.pixel(82, 47,1)
#line_19
display.pixel(45, 48,1)
display.pixel(57, 48,1)
display.pixel(63, 48,1)
display.pixel(64, 48,1)
display.pixel(65, 48,1)
display.pixel(66, 48,1)
display.pixel(67, 48,1)
display.pixel(72, 48,1)
display.pixel(83, 48,1)
#line_20
display.pixel(45, 49,1)
display.pixel(57, 49,1)
display.pixel(61, 49,1)
display.pixel(69, 49,1)
display.pixel(71, 49,1)
display.pixel(83, 49,1)
#line_21
display.pixel(45, 50,1)
display.pixel(57, 50,1)
display.pixel(62, 50,1)
display.pixel(68, 50,1)
display.pixel(71, 50,1)
display.pixel(83, 50,1)
#line_22
display.pixel(45, 51,1)
display.pixel(57, 51,1)
display.pixel(63, 51,1)
display.pixel(64, 51,1)
display.pixel(65, 51,1)
display.pixel(66, 51,1)
display.pixel(67, 51,1)
display.pixel(71, 51,1)
display.pixel(83, 51,1)
#line_23
display.pixel(46, 52,1)
display.pixel(56, 52,1)
display.pixel(57, 52,1)
display.pixel(58, 52,1)
display.pixel(59, 52,1)
display.pixel(60, 52,1)
display.pixel(69, 52,1)
display.pixel(70, 52,1)
display.pixel(71, 52,1)
display.pixel(72, 52,1)
display.pixel(73, 52,1)
display.pixel(82, 52,1)
#line_24
display.pixel(47, 53,1)
display.pixel(48, 53,1)
display.pixel(49, 53,1)
display.pixel(56, 53,1)
display.pixel(61, 53,1)
display.pixel(62, 53,1)
display.pixel(63, 53,1)
display.pixel(64, 53,1)
display.pixel(65, 53,1)
display.pixel(66, 53,1)
display.pixel(67, 53,1)
display.pixel(68, 53,1)
display.pixel(72, 53,1)
display.pixel(79, 53,1)
display.pixel(80, 53,1)
display.pixel(81, 53,1)
display.pixel(49, 54,1)
display.pixel(50, 54,1)
display.pixel(51, 54,1)
display.pixel(52, 54,1)
display.pixel(53, 54,1)
display.pixel(55, 54,1)
display.pixel(56, 54,1)
display.pixel(73, 54,1)
display.pixel(74, 54,1)
display.pixel(75, 54,1)
display.pixel(76, 54,1)
display.pixel(77, 54,1)
display.pixel(78, 54,1)
display.hline(10,10,110,1)
display.show()
bot.send(message['message']['chat']['id'], 'Bear drawing!')
def mus(message):
melody = [294,294,587,440,415,392,349,294,349,392,261,261,261,261,587,440,415,392,349,294,349,392,247,247,587,
440,415,392,349,294,349,392,233,233,233,233,584,440,415,392,349,294,349,392,294,294,587,440,415,392,349,294,349,392,261,261,261,261,587,440,415,392,349,294,349,392,247,247,587,
440,415,392,349,294,349,392,233,233,233,233,584,440,415,392,349,294,349,392
]
noteDurations = [
125,125,250,375,250,250,250,125,125,125,62,62,62,62,250,375,250,250,250,125,125,125,125,
125,250,375,250,250,250,125,125,125,62,62,62,62,250,375,250,250,250,125,125,125,125,125,250,375,250,250,250,125,125,125,62,62,62,62,250,375,250,250,250,125,125,125,125,
125,250,375,250,250,250,125,125,125,62,62,62,62,250,375,250,250,250,125,125,125
]
music.duty(512)
for i in range(len(melody)):
noteDuration = noteDurations[i]
music.freq(melody[i]*2)
time.sleep_ms(int(noteDuration))
music.deinit()
bot.send(message['message']['chat']['id'], 'Music playing!')
def show_weather(message):
weather.measure()
temp = weather.temperature()
hum = weather.humidity()
bot.send(message['message']['chat']['id'], f'Temperature: {temp}C\nHumidity: {hum}%')
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.scan()
wifi.connect('Wokwi-GUEST', '')
print('Connecting.', end='')
while not wifi.isconnected():
sleep(0.1)
print('.', end='')
print('\nConnected!')
token = '7444195365:AAEHl8lPQZflvSVIJxVriPcOqwOfNLVk1yg'
print('Bot starting...')
bot = utelegram.ubot(token)
bot.register('/on', led_on)
bot.register('/off', led_off)
bot.register('/check_door', check_distance)
bot.register('/check_weather', show_weather)
bot.register('/music',mus)
bot.register('/bear',bear)
bot.set_default_handler(show_text)
print('\nGO-GO-GO!!!!!')
bot.listen()