130 lines
3.3 KiB
Python
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()
|
|
|
|
|
|
|
|
|
|
|
|
|