UART och I2C är två seriekopplingsprotokoll som används för att möjliggöra kommunikation mellan olika enheter. I denna sektion utforskar vi deras funktioner och tillämpningar, särskilt med tanke på användningen av ESP32, ett av de mest populära mikrokontrollerkorten för IoT-applikationer. Vi kommer även att undersöka några exempel på hur dessa protokoll används för att ansluta sensorer och andra enheter.
UART-kommunikation (Universal Asynchronous Receiver/Transmitter) är ett asynkront kommunikationsprotokoll som kräver endast två ledningar: TX (transmit) och RX (receive). UART används ofta för att kommunicera med GSM/GPRS-moduler som SIM800L och SIM900A, där det möjliggör SMS, röstkommunikation, internetanslutning eller NB-IoT (Narrowband IoT). Det kan också användas för att ansluta termiska skrivare till ESP32 för att skriva ut text, bilder, streckkoder eller QR-koder. Genom att utnyttja UART kan dessa enheter effektivt kommunicera med ESP32, vilket gör det möjligt att snabbt implementera trådlösa lösningar för meddelanden, utskrifter och sensordata.
Det är viktigt att förstå de grundläggande funktionerna i UART-protokollet för att kunna implementera robusta och pålitliga system. UART är relativt enkel att använda men har vissa begränsningar, såsom begränsad hastighet och räckvidd. Eftersom det är asynkront, behöver UART inte en klocksignal, men det betyder också att synkronisering mellan enheterna måste säkerställas på andra sätt. I praktiken betyder detta att man måste vara noga med att definiera korrekt baudrate (överföringshastighet) och hantera eventuella fel vid överföring.
En annan viktig aspekt av UART är att det ofta används i en-punkts kommunikation där två enheter (vanligtvis en sändare och en mottagare) är direkt kopplade till varandra. Det innebär att denna metod inte är särskilt lämplig för kommunikation med flera enheter samtidigt. Därför kan I2C (Inter-Integrated Circuit) vara ett bättre val när fler enheter behöver anslutas till samma system.
I2C är ett synkront kommunikationsprotokoll som kräver två huvudsakliga ledningar: SDA (Serial Data Line) och SCL (Serial Clock Line). I2C kommunicerar genom ett master-slave-system där en masterenhet styr kommunikationen, och upp till flera slave-enheter kan anslutas till samma buss. Detta gör I2C till ett mycket flexibelt protokoll för applikationer där flera sensorer eller enheter behöver samordnas. En viktig förutsättning för att använda I2C är att alla enheter på samma buss måste dela samma klocksignal (SCL), vilket gör det till ett synkront protokoll.
En nyckelkomponent i I2C är hanteringen av adresser. Varje enhet på I2C-bussen har en unik adress som identifierar den för masterenheten. När kommunikationen startar, skickar masterenheten en startbeteckning på SDA-linjen, följt av en adress för den specifika enheten. När enheten har identifierats kan masterenheten läsa från eller skriva till enheten beroende på den överförda biten (läs- eller skrivbeteckning). Efter varje byte av data som överförs, skickar mottagaren ett bekräftelsebit (ACK), vilket indikerar om datan mottogs korrekt.
En annan viktig aspekt av I2C är att varje transaktion på bussen avslutas med en stoppbeteckning, som gör det möjligt för andra enheter på samma buss att börja kommunicera. För att stabilisera kommunikationen behövs pull-up-resistorer på både SDA och SCL-linjerna för att hålla signalerna på rätt nivåer. De flesta moderna moduler har inbyggda pull-up-resistorer, men det är något att vara medveten om när man konstruerar sina kretsar.
I praktiken används I2C ofta för att ansluta sensorer, realtidsklockor och andra integrerade enheter. Till exempel kan en DS1307 realtidsklocka (RTC) anslutas till en ESP32 via I2C för att hålla reda på tid och datum, även om systemet stängs av. För att implementera detta med ESP32, behövs specifika bibliotek som Wire (för I2C-kommunikation) och RTClib (för att interagera med RTC-enheten). Efter att ha installerat dessa bibliotek och anslutit RTC-modulen kan man läsa och skriva tid/datum via I2C-protokollet.
För att använda I2C korrekt på ESP32 krävs det också att man noggrant konfigurerar I2C-pinnarna och säkerställer att rätt spänning (3.3V eller 5V) används för de enheter som är anslutna till systemet. Att ha en gemensam mark (GND) mellan enheterna är avgörande för att upprätthålla en korrekt kommunikation och undvika spänningsproblem som kan leda till felaktig överföring.
När man arbetar med både UART och I2C är det också viktigt att tänka på hur man hanterar fel och hur man optimerar kommunikationshastigheten. Med UART kan förluster i dataöverföring vara vanliga om baudraten inte är korrekt inställd, medan I2C kan leda till kollisioner om flera enheter försöker kommunicera samtidigt utan korrekt synkronisering. Både protokollen har sina fördelar och nackdelar, och valet av protokoll bör baseras på specifika applikationers krav, såsom antalet enheter som ska anslutas och de specifika funktionerna som behövs.
När man lär sig använda dessa protokoll, är det också viktigt att inte bara förstå hur kommunikationen fungerar på en grundläggande nivå, utan också att kunna felsöka och optimera koden och hårdvarukonfigurationen för att säkerställa robust och pålitlig drift av systemet.
Hur man skapar ett smart hem med ESP32: Anslutning och datalogging
För att skapa ett smart hem är det viktigt att förstå hur man ansluter sensorer och samlar in data för att övervaka och styra miljön i olika rum. Varje rum, förutom vardagsrummet, har en enhetlig uppsättning sensorer för att logga och övervaka omgivningen. I varje rum finns en DHT-sensor för temperatur och luftfuktighet, en LDR-modul för ljusnivåer, och en rörelsesensor för att upptäcka människonärvaro.
Anslutningen för dessa sensorer ser ut så här:
-
DHT-sensor:
-
VCC: Kopplas till en 3,3V eller 5V strömkälla
-
GND: Kopplas till jord (0V)
-
Data (D12): Kopplas till pin D12 på ESP32-mikrokontrollern
-
-
LDR-modul:
-
VCC: Kopplas till en 3,3V eller 5V strömkälla
-
GND: Kopplas till jord (0V)
-
Data (D13): Kopplas till pin D13 på ESP32-mikrokontrollern
-
-
Rörelsesensor:
-
VCC: Kopplas till en 3,3V eller 5V strömkälla
-
GND: Kopplas till jord (0V)
-
Data (D14): Kopplas till pin D14 på ESP32-mikrokontrollern
-
För vardagsrummet introducerar vi en extra komponent, servomotorn, som används för att simulera en dörrlåsfunktion. Den aktiveras när vi tar emot ett MQTT-meddelande, vilket innebär att den är styrd på distans.
Anslutningen för denna motor är som följer:
-
Servomotor (vardagsrum):
-
Data (D15): Kopplas till pin D15 på ESP32
-
VCC: Kopplas till en 3,3V eller 5V strömkälla
-
GND: Kopplas till jord (0V)
-
Denna anslutningsdiagram ser till att varje komponent i rummen samarbetar för att logga data och ge realtidsövervakning, vilket gör det möjligt att samla data och kontrollera systemet effektivt, samtidigt som elektrisk stabilitet och användarvänlig funktionalitet bibehålls.
När anslutningarna är gjorda, är nästa steg att skriva kod för att läsa sensordata. Genom att använda Arduino IDE kan vi ladda upp följande kod till ESP32-mikrokontrollern så att den kan läsa av sensordata från DHT22, rörelsesensorn och LDR.
Koden börjar med att definiera pins för sensorerna: DHTPIN för DHT22-sensorn, LDR för ljusberoende motstånd (LDR), och motionsensor för rörelsesensorn. Funktionen setupSensors() ansvarar för att initiera sensorerna, och funktionen readSensors() hämtar data från dessa sensorer. Temperatur- och luftfuktighetsdata från DHT-sensorn, rörelsens tillstånd från rörelsesensorn och ljusnivån från LDR skrivs sedan ut på serial monitor.
För att logga data från sensorerna används InfluxDB, en högpresterande tidsseriedatabas som är utmärkt för att lagra och fråga tidsstämplad data. I detta fall handlar det om att lagra data som förändras över tid, som temperatur, luftfuktighet och ljusnivåer. InfluxDB gör det möjligt att analysera förändringar och trender genom att organisera data med tidsstämplar, vilket är perfekt för att hantera sensoravläsningar.
För att sätta upp InfluxDB Cloud och logga data, skapar du ett konto på deras webbplats. Efter inloggning skapar du en "bucket", vilket är en behållare för tidsseriedata som lagrar och hanterar data med en specifik livscykel. Buckets gör det också möjligt att hantera tillgång och organisera data på ett effektivt sätt. När en bucket är skapad, kan du börja logga dina data från ESP32.
För att kunna skicka data till databasen krävs vissa inställningar, såsom att ange databasens URL och användarens organisation-ID. Dessa steg är nödvändiga för att säkerställa att den insamlade datan hamnar på rätt plats i databasen för vidare analys.
Vid användning av tidsseriedata, som i fallet med DHT-sensorn, loggas data i specifika intervall, ofta med tidsstämplar för varje läsning. Detta skapar en kontinuerlig ström av data som kan användas för att identifiera trender och mönster. Exempelvis kan en temperatur- och luftfuktighetslogg från en DHT-sensor som mäter var femte minut ge en tydlig bild av hur dessa värden förändras över tid.
När du har satt upp din InfluxDB Cloud och skapat en bucket, kan du börja logga data och analysera hur dessa mätvärden förändras över tid. Detta ger en detaljerad översikt över ditt smarta hem och gör det möjligt att anpassa funktionaliteten baserat på realtidsdata.
Det är viktigt att förstå att den databasstruktur som används för att lagra tidsseriedata ger stor flexibilitet vid hantering av stora mängder data. Genom att förstå principerna bakom tidsstämplad data kan användaren effektivt organisera och analysera sina data för att göra välgrundade beslut om systemets funktionalitet.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский