# подключение к wifi сети
import network
print("Connecting to network...")
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("Wokwi-GUEST", "")
while not wlan.isconnected():
pass
print("IP Address:", wlan.ifconfig()[0])
print("Subnet Mask:", wlan.ifconfig()[1])
print("Gateway:", wlan.ifconfig()[2])
print("DNS Server:", wlan.ifconfig()[3])
print("Successfully connected")
# установка и импорт необходимых библиотек
import machine
from utime import sleep
import upip
upip.install("micropython-urequests")
upip.install('micropython-ssd1306')
import urequests
import ssd1306
# диод
diode = machine.Pin(15, machine.Pin.OUT)
# функция отправки запроса, обработки ответа и управления диодом
def led_on_off_with_response():
response = urequests.get("https://yesno.wtf/api")
if response.status_code == 200:
data = response.json()
answer = data['answer']
print(answer)
if answer == 'no':
diode.off()
elif answer == 'yes':
diode.on()
response.close()
else:
print('ERROR: yesno.wtf')
# дисплей
i2c = machine.SoftI2C(scl=machine.Pin(22), sda=machine.Pin(21))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
def weather():
# логин и пароль от API погоды: [email protected]
response = urequests.get("http://api.weatherapi.com/v1/current.json?key=c34f7f5c7d4549e3a0092325232610&q=Tyumen&aqi=yes")
if response.status_code == 200:
data = response.json()
location = data['location']['name']
temp_c = data['current']['temp_c']
condition = data['current']['condition']['text']
wind_mph = data['current']['wind_mph']
humidity = data['current']['humidity']
cloud = data['current']['cloud']
co = data['current']['air_quality']['co']
so2 = data['current']['air_quality']['so2']
print("Current weather in {0}:\nTEMP={1}C, CONDITION={2}\nWIND={3}mph, HUMIDITY={4}%, CLOUD={5}%\nAIR QUALITY: CO={6}, SO2={7}".format(location, temp_c, condition, wind_mph, humidity, cloud, co, so2))
# вычисляем координату x, чтобы вывести локацию по центру
display_width = oled.width
text_width = len(location) * 8
x = (display_width - text_width) // 2
# очистить дисплей
oled.fill(0)
oled.show()
# печатаем информацию о погоде на дисплее
oled.text(location, x, 0)
oled.text("TEMP:{}C".format(temp_c), 0, 20)
oled.text("WIND:{}mph".format(wind_mph), 0, 30)
oled.text("HUMIDITY:{}%".format(humidity), 0, 40)
oled.text("CLOUD:{}%".format(cloud), 0, 50)
oled.show()
# работа зуммера исходя из данных so
so_buzzer(co)
# работа сервопривода исходя из данных влажности
humidity_servo(humidity)
# зуммер
buzzer = machine.Pin(18, machine.Pin.OUT)
def so_buzzer(co):
if co > 200 and co < 400:
buzzer.on()
sleep(1)
buzzer.off()
buzzer.on()
sleep(1)
buzzer.off()
buzzer.on()
sleep(1)
buzzer.off()
elif co > 400 and co < 600:
buzzer.on()
sleep(2)
buzzer.off()
buzzer.on()
sleep(2)
buzzer.off()
elif co > 600:
buzzer.on()
sleep(5)
buzzer.off()
# сервопривод
servo_pin = machine.Pin(25, machine.Pin.OUT)
servo_pwm = machine.PWM(servo_pin)
servo_pwm.freq(50)
def set_servo_angle(angle):
servo_pwm.duty(angle)
sleep(1)
def humidity_servo(humidity):
# the minimum position corresponds to a pulse width of 0.5ms
# the maximum position to one of 2.4ms
# # 0.5ms/20ms = 0.025 = 2.5% duty cycle
# 2.4ms/20ms = 0.12 = 12% duty cycle
# 0.025*1024=25.6
# 0.12*1024=122.88
if humidity < 55:
set_servo_angle(26)
elif humidity >= 55 and humidity < 90:
set_servo_angle(123)
while True:
# при обновлении информации
oled.fill(0)
oled.show()
oled.text("UPDATING INFO...", 0, 30)
oled.show()
set_servo_angle(76)
# получить рандомный да/нет и вкл/выкл лампочку (задание 1)
led_on_off_with_response()
# получение данных о погоде и вывод в консоль (задание 2-3)
# работа с устройствами: экран, зуммер и сервопривод (задание 4)
weather()
# пауза перед следующим обновлением данных
sleep(10)