2023-06-10 20:23:16 +02:00

130 lines
3.3 KiB
Python

from machine import Pin, SoftI2C
from time import sleep
from bme680 import *
import ssd1306
import machine
import network
from umqtt.robust import MQTTClient
import sys
pwm = machine.PWM(machine.Pin(16), freq=50)
wifi = network.WLAN(network.STA_IF)
client = MQTTClient(client_id=b'esp32',
server=b'192.168.1.64',
port=1883,
user=b'patate',
password=b'patate',
keepalive=30,
ssl=False)
try:
client.connect()
print('Connection ok');
except Exception as e:
print('Could not connect to MQTT server {}{}'.format(type(e).__name__, e))
sys.exit()
# Fonction pour déplacer le servo moteur vers une position donnée
def set_position(position):
# Convertion de la position en valeur de duty
duty = int(position / 180 * 1023)
# Envoi de la valeur de duty au servo moteur
pwm.duty(duty)
i2c = SoftI2C(scl=Pin(22), sda=Pin(21))
bme = BME680_I2C(i2c=i2c)
# Définition de la tailler de l'écran oled
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
if wifi.isconnected():
print ("connecté au réseau wifi")
print(wifi.ifconfig())
else:
print ("NON connecté au réseau wifi")
pin_led = Pin(2, mode=Pin.OUT) # Led sur l'ESP
ledR=Pin(14,Pin.OUT) # LED externe
def control(topic,msg):
print(msg)
if 'ledE' in topic:
if 'true' in msg :
pin_led.on()
else :
pin_led.off()
elif 'ledR' in topic:
if 'true' in msg :
ledR.value(1)
else :
ledR.value(0)
elif 'motor' in topic:
if 'Droite' in msg :
set_position(10)
time.sleep(0.4)
set_position(0)
else:
set_position(20)
time.sleep(0.4)
set_position(0)
client.set_callback(control)
client.subscribe('esp32/ledE', 1)
client.subscribe('esp32/ledR', 1)
client.subscribe('esp32/motor', 1)
count=120
while True:
try:
client.check_msg()
count+=1
if (count>120) :
# Données du BME680 :
temperature = str(round(bme.temperature, 2))
humidite = str(round(bme.humidity, 2))
pression = str(round(bme.pressure, 2))
gas = str(round(bme.gas/1000, 2))
#print('temperature:', temperature,'|','humidite:', humidite,'|','pression:', pression, '|', 'Gas:', gas)
oled.text(temperature + ' C', 0, 5) # Affichage de la temperatureerature
oled.text(humidite + ' %', 0, 20) # Affichage de l'humiditeidité
oled.text(pression + ' hPa', 0, 35) # Affichage de la pressionsion atmosphérique
oled.text(gas + ' ppm', 0, 50) # Affichage du gaz
oled.show() # Affiche les valeurs sur l'écran
oled.fill(0) # Renitialise l'affichage
bme680='{"temperature": '+ temperature + ',' + '"humidite": '+ humidite + ',' + '"pression": ' + pression + ',' + '"gas": ' + gas + '}'
count=0
client.publish('esp32/bme', bme680)
print("Publish : " + str(bme680))
time.sleep(0.1)
except KeyboardInterrupt:
print('Ctrl-C pressionsed...exiting')
client.disconnect()
sys.exit()