[PYTHON] Production d'un système de contrôle de température avec tarte aux framboises et ESP32 (2) Production d'un appareil de transmission

Création d'un appareil qui envoie des données de température et d'humidité à une tarte aux framboises.

Disposition générale

Les pièces sont soudées à la carte universelle. image.png

circuit

Connectez SHT31 et ssd1306 en parallèle avec i2c. Cependant, connectez simplement les quatre lignes en parallèle. Facile Facile.

image.png

Confirmer l'adresse i2c

Après avoir décidé du câblage, vérifiez l'adresse sur la maquette. Le code référencé cette page.

Exécutez le code et notez l'adresse qui s'affiche. Dans ce cas, SHT31 était 0x45 et ssd1306 était 0x3C.

Écrire dans ESP32

/*
 * =========WiFi Config==========
*/
#include "WiFi.h"
#include "AsyncUDP.h"
#include <stdio.h>

const char * ssid = "ssid";
const char * password = "mot de passe ssid";

//L'adresse IP doit être la même pour tous les ESP32 multiples.
AsyncUDP udp;
IPAddress ESP32_ip(192,168,x,x);
IPAddress server_ip(192,168,x,x);
IPAddress gateway(192,168, x, x);
IPAddress subnet(255, 255, 255, 0);
IPAddress DNS(192, 168, x, x);

//Attribuer un numéro unique à ESP32
int deviceNo = 1;

#define ssd1306_Address 0x3C  //adresse i2c du ssd1306
#define SHT31_Address  0x45  //Adresse I2C du SHT31

WiFiServer server(80);

const int LEDPIN = 2;
const int PORTNO = 1234;
/*
 * =========SHT31 Config==========
*/
#include <SPI.h>
#include <Arduino.h>
#include <Wire.h>
#include "AE_SHT31.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define NUMFLAKES     10 // Number of snowflakes in the animation example



//Définissez l'adresse du SHT31
AE_SHT31 SHT31 = AE_SHT31(SHT31_Address);

float temp,humi;


/*
 * =========SeepSleep Config==========
*/

#define uS_TO_S_FACTOR 1000000  /* Conversion factor for micro seconds to seconds */
#define TIME_TO_SLEEP  9     /* Time ESP32 will go to sleep (in seconds) */

RTC_DATA_ATTR int bootCount = 0;

void print_wakeup_reason(){
  esp_sleep_wakeup_cause_t wakeup_reason;

  wakeup_reason = esp_sleep_get_wakeup_cause();

  switch(wakeup_reason)
  {
    case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
    case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
    case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
    case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
    case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
    default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break;
  }
}






void setup() {
  //Réglez la communication série sur 9600 bps
  Serial.begin(9600);
  
  //Sortir les caractères en série
  //Réinitialisation logicielle SHT31
  SHT31.SoftReset();
  //Chauffage intégré 0:OFF 1:ON
  SHT31.Heater(0);

  if(!display.begin(SSD1306_SWITCHCAPVCC,ssd1306_Address )) { 
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }

  display.clearDisplay();
  
  //Paramètres d'affichage du ssd1306
  display.drawPixel(10, 10, WHITE);
  display.setTextSize(2);
  display.setTextColor(WHITE);
  
   temp = SHT31_TEMP();
   humi = SHT31_HUMI();
   
/*
 * =========Affichage d'affichage==========
*/
   
   display.clearDisplay();
   display.setCursor(0,0);
   display.print(" "); 
   display.print(temp); 
   display.println(" 'C");
   
   display.print(" "); 
   display.print(humi); 
   display.println(" %"); 
     
   display.display();
/*
 * =========WiFi Setup==========
*/

   pinMode(LEDPIN,OUTPUT);
    
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);

    WiFi.config(ESP32_ip, gateway, subnet, DNS); 
    
    if (WiFi.waitForConnectResult() != WL_CONNECTED) {
        Serial.println("WiFi Failed");
        while(1) {
            delay(1000);
        }
    }
    
    if(udp.connect(server_ip, PORTNO)) {
        Serial.println("UDP connected");
        udp.onPacket([](AsyncUDPPacketpacket) {
            Serial.print("UDP Packet Type: ");
            Serial.print(packet.isBroadcast()?"Broadcast":packet.isMulticast()?"Multicast":"Unicast");
            Serial.print(", From: ");
            Serial.print(packet.remoteIP());
            Serial.print(":");
            Serial.print(packet.remotePort());
            Serial.print(", To: ");
            Serial.print(packet.localIP());
            Serial.print(":");
            Serial.print(packet.localPort());
            Serial.print(", Length: ");
            Serial.print(packet.length());
            Serial.print(", Data: ");
            Serial.write(packet.data(), packet.length());
            Serial.println();
            //reply to the client
            packet.printf("Got %u bytes of data", packet.length());
        });


    }

}



void loop()
{

   temp = SHT31_TEMP();
   humi = SHT31_HUMI();
   
/*
 * =========Affichage d'affichage==========
*/
   
   display.clearDisplay();
   display.setCursor(0,0);
   display.print(" "); 
   display.print(temp); 
   display.println(" 'C");
   
   display.print(" "); 
   display.print(humi); 
   display.println(" %"); 
     
   display.display();
   
/*
 * =========Transmission UDP==========
*/
//dtostrf(Valeur à convertir,Nombre total de caractères après la conversion,Nombre de chiffres après la virgule décimale,Variables à stocker après la conversion);
    
    char udpStr1[6];
    char udpStr2[6];
    char buf[10];
    
    dtostrf(temp,5,2,udpStr1);
    dtostrf(humi,5,2,udpStr2);
    
    sprintf(buf,"%d,%s,%s",deviceNo,udpStr1,udpStr2);
    Serial.println(buf);
    
    udp.broadcastTo(buf, PORTNO);

/*
 * =========Post-traitement==========
*/

   Ltika();
   ESP32_Sleep(10*60);
}

/*
 * =========Obtention de la température et de l'humidité du SHT31==========
*/

float SHT31_TEMP(){
    //Obtenir les données de température du SHT31
  SHT31.GetTempHum();
  return SHT31.Temperature();
}

float SHT31_HUMI(){
    //Obtenez les données d'humidité de SHT31
  SHT31.GetTempHum();
  return SHT31.Humidity();
}

/*
 * =========ESP32 DeepSleep==========
*/

void ESP32_Sleep(int sleepime){
  
  delay(1000); //Take some time to open up the Serial Monitor
  ++bootCount;

  print_wakeup_reason();

  esp_sleep_enable_timer_wakeup(sleepime * uS_TO_S_FACTOR);
  esp_deep_sleep_start();

}

/*
 * =========L Chika==========
*/

void Ltika(){    
    for (int i=0;i<3;i++){
      digitalWrite(LEDPIN,HIGH);
      delay(100);
      digitalWrite(LEDPIN,LOW);
      delay(100);
    }
}

Ligne 204, sprintf (buf, "% d,% s,% s", deviceNo, udpStr1, udpStr2); Le numéro de l'appareil, les données de température et d'humidité sont envoyés ensemble de manière séparée par des virgules. Il s'agit de distribuer les données pour chaque position après avoir reçu l'UDP plus tard.

Commencez

Lorsque vous écrivez sur le micro-ordinateur et que vous le démarrez, la température et l'humidité s'affichent à l'écran. Si la communication réussit, la LED bleue de la carte ESP32 clignotera 3 fois. image.png

Ensuite, j'écrirai un article sur le côté tarte aux framboises.

Recommended Posts

Production d'un système de contrôle de température avec tarte aux framboises et ESP32 (2) Production d'un appareil de transmission
Production de système de contrôle de température avec tarte aux framboises et ESP32 (1)
Création d'un système de contrôle de température avec tarte aux framboises et ESP32 (3) Réception d'un fichier Python
Obtenez la température et l'humidité avec DHT11 et Raspberry Pi
Mesurer la température du processeur de Raspeye avec Python
Enregistrez la température et l'humidité avec systemd sur Raspberry Pi
Mesurez la température et l'humidité avec Raspberry Pi3 et visualisez avec Ambient
Mesurez et comparez les températures avec Raspberry Pi et générez automatiquement des graphiques
[Raspberry Pi] Contrôle du moteur pas à pas avec Raspberry Pi
Commande de servomoteur avec Raspberry Pi
Créez facilement un TweetBot qui vous informe de la température et de l'humidité avec Raspberry Pi + DHT11.
Notifier LINE de la température corporelle du thermomètre BLE avec la tarte à la râpe # 1
Avertir LINE de la température corporelle du thermomètre BLE avec la tarte à la râpe n ° 2
Affichage graphique de la consommation électrique des ménages avec 3GPI et Raspeye
Surveillance des animaux avec Rekognition et Raspberry pi
J'ai tweeté l'éclairement de la pièce avec Raspberry Pi, Arduino et un capteur optique
Sortie CSV des données d'impulsion avec Raspberry Pi (sortie CSV)
Obtenez des informations sur le processeur de Raspberry Pi avec Python
Raspberry + am2302 Mesure la température et l'humidité avec un capteur de température et d'humidité
Contrôlez la lecture de musique sur un smartphone connecté à Raspberry Pi 3 et Bluetooth avec AVRCP
Construction VPN simple de la passerelle IPsec avec Ubuntu 20.04 et Raspberry Pi --2 Confirmation de connexion VPN StrongSwan
Apprentissage automatique avec Raspberry Pi 4 et Coral USB Accelerator
IoT facile pour démarrer avec Raspeye et MESH
Détecter l'état de port du masque avec OpenCV et Raspberry Pi
Contrôlez les moteurs sans balais avec GPIO de Raspberry Pi Zero
Changer les valeurs du thermo-hygromètre Bot avec Raspberry Pi
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
Contrôler la mise sous / hors tension du port USB du Raspberry Pi
Installation de Docker sur Raspberry Pi et L Chika
Installez pyenv sur Raspberry Pi pour gérer Python
Résoudre les problèmes liés à l'installation d'OpenCV sur Raspberry Pi et à la capture
Gestion des versions de Node, Ruby et Python avec anyenv
Simulez la mesure de température avec Raspberry Pi + Flask + SQLite + Ajax
GPGPU avec Raspberry Pi
DigitalSignage avec Raspberry Pi
Créez votre propre plate-forme IoT à l'aide de raspberrypi et ESP32 (partie 3) ~ Paramètres ESP32 Capteur de température analogique
Contrôlez librement l'affichage du tableau d'affichage RGB LED Matirix Lightning avec Raspberry Pi 3B +
Introduction facile au piratage domestique avec Raspberry Pi et discord.py
Débutant Python s'ouvre et se ferme avec Raspberry Pi
J'ai essayé d'exécuter Movidius NCS avec python de Raspberry Pi3
Créez des jeux LCD (16x2) avec Raspberry Pi et Python
La communication I2C est effectuée en contrôlant la communication série avec python (à l'aide d'un périphérique USBGPIO8)
Contrôle de la communication série avec communication python et SPI (à l'aide d'un périphérique USBGPIO8)
Un programme qui reçoit la commande d'asservissement du contrôleur radio, interrompt la tarte aux râpes et l'enregistre.
Construire un environnement distribué avec la série Raspberry PI (Partie 2: Analyse PiServer et conception de système alternatif)
Reconnaissance d'image des déchets avec Edge (Raspberry Pi) à partir de zéro connaissance en utilisant AutoML Vsion et TPU
Mesurez la température, l'humidité, etc. avec SensorTag et envoyez-le à Ambient via Raspberry Pi 3 pour le représenter graphiquement Partie 2
Plantes Mutter avec Raspberry Pi
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
Faire une boussole d'affichage kanji avec Raspberry Pi et Sense Hat
Créez votre propre plateforme IoT en utilisant raspberrypi et ESP32 (partie 1)
Présentation de M5StickC (Mesure de température / humidité et transmission MQTT, UIFlow Python)
Consigner périodiquement les valeurs des capteurs d'environnement Omron avec Raspberry Pi
Comment mettre OpenCV dans Raspberry Pi et collecter facilement des images des résultats de détection de visage avec Python
Lisez les données du lecteur NFC connecté à Raspberry Pi 3 avec Python et envoyez-les à openFrameworks avec OSC