[PYTHON] Herstellung eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (2) Herstellung eines Übertragungsgeräts

Erstellen eines Geräts, das Temperatur- und Feuchtigkeitsdaten an einen Himbeerkuchen sendet.

Gesamtlayout

Teile werden auf die Universalplatine gelötet. image.png

Schaltkreis

Verbinden Sie SHT31 und ssd1306 parallel mit i2c. Verbinden Sie jedoch einfach die vier Leitungen parallel. Leicht leicht.

image.png

Bestätigen Sie die i2c-Adresse

Überprüfen Sie nach der Entscheidung für die Verkabelung die Adresse auf dem Steckbrett. Der Code, auf den [diese Seite] verwiesen wird (https://leico.github.io/TechnicalNote/Arduino/esp32-i2cscan).

Führen Sie den Code aus und notieren Sie sich die Adresse, die angezeigt wird. In diesem Fall war SHT31 0x45 und ssd1306 war 0x3C.

Schreiben Sie an ESP32

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

const char * ssid = "ssid";
const char * password = "SSID-Passwort";

//Die IP-Adresse sollte für alle Mehrfach-ESP32 gleich sein.
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);

//Weisen Sie ESP32 eine eindeutige Nummer zu
int deviceNo = 1;

#define ssd1306_Address 0x3C  //i2c Adresse von ssd1306
#define SHT31_Address  0x45  //I2C-Adresse von 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



//Stellen Sie die Adresse von SHT31 ein
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() {
  //Stellen Sie die serielle Kommunikation auf 9600 Bit / s ein
  Serial.begin(9600);
  
  //Zeichen seriell ausgeben
  //Soft Reset SHT31
  SHT31.SoftReset();
  //Einbauheizung 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();
  
  //Anzeigeeinstellungen für ssd1306
  display.drawPixel(10, 10, WHITE);
  display.setTextSize(2);
  display.setTextColor(WHITE);
  
   temp = SHT31_TEMP();
   humi = SHT31_HUMI();
   
/*
 * =========Anzeige anzeigen==========
*/
   
   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();
   
/*
 * =========Anzeige anzeigen==========
*/
   
   display.clearDisplay();
   display.setCursor(0,0);
   display.print(" "); 
   display.print(temp); 
   display.println(" 'C");
   
   display.print(" "); 
   display.print(humi); 
   display.println(" %"); 
     
   display.display();
   
/*
 * =========UDP-Übertragung==========
*/
//dtostrf(Zu konvertierender Wert,Gesamtzahl der Zeichen nach der Konvertierung,Anzahl der Stellen nach dem Dezimalpunkt,Variablen, die nach der Konvertierung gespeichert werden sollen);
    
    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);

/*
 * =========Nachbearbeitung==========
*/

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

/*
 * =========Ermitteln der Temperatur und Luftfeuchtigkeit von SHT31==========
*/

float SHT31_TEMP(){
    //Holen Sie sich Temperaturdaten von SHT31
  SHT31.GetTempHum();
  return SHT31.Temperature();
}

float SHT31_HUMI(){
    //Holen Sie sich Feuchtigkeitsdaten von 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);
    }
}

Zeile 204, sprintf (buf, "% d,% s,% s", deviceNo, udpStr1, udpStr2); Die Daten zu Gerätenummer, Temperatur und Luftfeuchtigkeit werden durch Kommas getrennt gesendet. Dies dient dazu, die Daten für jede Position nach späterem Empfang des UDP zu verteilen.

Anlaufen

Wenn Sie auf den Mikrocomputer schreiben und ihn starten, werden Temperatur und Luftfeuchtigkeit auf dem Display angezeigt. Wenn die Kommunikation erfolgreich ist, blinkt die blaue LED auf der ESP32-Karte dreimal. image.png

Als nächstes werde ich einen Artikel über die Himbeerkuchen-Seite schreiben.

Recommended Posts

Herstellung eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (2) Herstellung eines Übertragungsgeräts
Herstellung eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (1)
Erstellen eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (3) Empfangen einer Python-Datei
Holen Sie sich Temperatur und Luftfeuchtigkeit mit DHT11 und Raspberry Pi
Messen Sie die CPU-Temperatur von Raspeye mit Python
Notieren Sie Temperatur und Luftfeuchtigkeit mit systemd auf Raspberry Pi
Messen Sie Temperatur und Luftfeuchtigkeit mit Raspberry Pi3 und visualisieren Sie mit Ambient
Messen und vergleichen Sie Temperaturen mit Raspberry Pi und generieren Sie automatisch Diagramme
[Raspberry Pi] Schrittmotorsteuerung mit Raspberry Pi
Servomotorsteuerung mit Raspberry Pi
Erstellen Sie mit Raspberry Pi + DHT11 ganz einfach einen TweetBot, der Sie über Temperatur und Luftfeuchtigkeit informiert.
Benachrichtigen Sie LINE über die Körpertemperatur vom BLE-Thermometer mit Raspeltorte Nr. 1
Benachrichtigen Sie LINE über die Körpertemperatur vom BLE-Thermometer mit Raspeltorte Nr. 2
Grafische Darstellung des Stromverbrauchs im Haushalt mit 3GPI und Raspeye
Haustierüberwachung mit Rekognition und Raspberry pi
Ich habe die Beleuchtungsstärke des Raumes mit Raspberry Pi, Arduino und einem optischen Sensor getwittert
CSV-Ausgabe von Impulsdaten mit Raspberry Pi (CSV-Ausgabe)
Holen Sie sich CPU-Informationen von Raspberry Pi mit Python
Himbeere + am2302 Temperatur und Luftfeuchtigkeit mit Temperatur- und Feuchtigkeitssensor messen
Steuern Sie die Musikwiedergabe auf einem Smartphone, das mit Raspberry Pi 3 und Bluetooth mit AVRCP verbunden ist
Einfacher VPN-Aufbau eines IPSec-Gateways mit Ubuntu 20.04 und Raspberry Pi - 2 StrongSwan VPN-Verbindungsbestätigung
Maschinelles Lernen mit Raspberry Pi 4 und Coral USB Accelerator
Einfaches IoT, um mit Raspeye und MESH zu beginnen
Ermitteln Sie den Tragezustand der Maske mit OpenCV und Raspberry Pi
Steuern Sie bürstenlose Motoren mit GPIO von Raspberry Pi Zero
Umschalten der Bot-Thermo-Hygrometer-Werte mit Raspberry Pi
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
Steuern Sie das Ein- und Ausschalten des USB-Anschlusses des Raspberry Pi
Installation von Docker auf Raspberry Pi und L Chika
Installieren Sie pyenv auf Raspberry Pi, um Python zu verwalten
Fehlerbehebung bei der Installation von OpenCV auf Raspberry Pi und der Erfassung
Versionsverwaltung von Node, Ruby und Python mit anyenv
Simulieren Sie die Temperaturmessung mit Raspberry Pi + Flask + SQLite + Ajax
GPGPU mit Raspberry Pi
DigitalSignage mit Raspberry Pi
Erstellen Sie Ihre eigene IoT-Plattform mit raspberrypi und ESP32 (Teil 3) ~ ESP32-Einstellungen Analoger Temperatursensor
Steuern Sie die Anzeige des RGB LED Matirix Lightning Bulletin Boards mit Raspberry Pi 3B + frei
Einfache Einführung in Home Hack mit Raspberry Pi und discord.py
Python-Anfänger öffnet und schließt die ineinandergreifende Kamera mit Raspberry Pi
Ich habe versucht, Movidius NCS mit Python von Raspberry Pi3 auszuführen
Erstellen Sie LCD-Spiele (16x2) mit Raspberry Pi und Python
Die I2C-Kommunikation erfolgt durch Steuerung der seriellen Kommunikation mit Python (über ein USBGPIO8-Gerät).
Serielle Kommunikationssteuerung mit Python- und SPI-Kommunikation (mit USBGPIO8-Gerät)
Ein Programm, das den Servobefehl der Funksteuerung empfängt, den Raspetorte unterbricht und protokolliert.
Erstellen einer verteilten Umgebung mit der Raspberry PI-Serie (Teil 2: PiServer-Analyse und alternatives Systemdesign)
Bilderkennung von Müll mit Edge (Raspberry Pi) aus null Wissen mit AutoML Vsion und TPU
Messen Sie Temperatur, Luftfeuchtigkeit usw. mit SensorTag und senden Sie es über Raspberry Pi 3 an Ambient, um es Teil 2 grafisch darzustellen
Mutter pflanzt mit Raspberry Pi
Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3!
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Erstellen Sie einen Kanji-Kompass mit Raspberry Pi und Sense Hat
Erstellen Sie Ihre eigene IoT-Plattform mit Himbeerpi und ESP32 (Teil 1)
Einführung in M5StickC (Temperatur- / Feuchtigkeitsmessung und MQTT-Übertragung, UIFlow Python)
Protokollieren Sie die Omron-Umgebungssensorwerte regelmäßig mit Raspberry Pi
So fügen Sie OpenCV in Raspberry Pi ein und sammeln mit Python ganz einfach Bilder von Gesichtserkennungsergebnissen
Lesen Sie die Daten des NFC-Lesegeräts, das mit Python an Raspberry Pi 3 angeschlossen ist, und senden Sie sie mit OSC an openFrameworks