Skapa din första IoT Ethernet-enhet. Del 5: Sakernas Internet, Home Automation (5 / 8 steg)

Steg 5: Programvara översikt - del B



Ingressen

För att framgångsrikt sammanställa detta Källkod behöver du följande extra bibliotek (det finns några);

PubSubClient.h

DHT.h

Bounce2.h

LiquidCrystal_I2C_PCF8574.h

  • Av: Steve Quinn
  • Syfte: Bibliotek för att kontrollera, läsa från och skriva till LCD visas
  • Från:

Adafruit_GFX.h

Adafruit_ILI9341.h

DS1307.h

Time.h

Adafruit_BMP085.h

Fullständig information också ges i källkoden nedan.

Du behöver också veta;

  1. IP-adressen på din MQTT mäklare (i IPv4 format AAA. BBB. CCC. DDD): IP-adress server()
  2. En gratis IP-adressen för enheten IoT om du inte vill använda den 'USE_DHCP_FOR_IP_ADDR' #define i koden.

Kodöversikt

Vid start ansluter programvaran till Ethernetnätverket med de medskickade anslutningsinformation som ovan.

När du är ansluten till ett LAN publicerar IoT enheten dess detaljer i följande MQTT ämnen;

  1. /EthernetDevice/SwVerConfirm: Detta innehåller en länkad sträng, kommaavgränsad, bildas av generiska enhetsnamnet, unika MAC-adressen för enheten och namnet på filen Arduino används för att programmera enheten. i detta fall "WIZNet5100,de:ad:be:ef:fe:ed,MQTTEthernetAll6_5.ino".
  2. /EthernetDevice/Temp1Status: Vid första anslutningen till nätverket publicerar detta ämne ett "Connected" meddelande till mäklaren. Därefter är det brukade publicera den lokala temperaturen i grad Celsius korrekt med 2 decimaler. Uppdateringar utfärdas endast om det finns en förändring i temperatur för att förhindra att denna Sakernas Internet "överbelastning" nätverket.
  3. /EthernetDevice/Humd1Status: Liknande till Temp1Status, men är en representation av de lokala luftfuktigheten skalas i procent.
  4. /EthernetDevice/HeatInd1Status: Liknar både Temp1Status och Humd1Status, men i detta ögonblick programvaran beräknar de nya värme indexet från temperatur och luftfuktighetsvärdena.
  5. /EthernetDevice/Barometric1Status: Liknande till Temp1Status, Humd1Status och HeatInd1Status, men är en representation av lokala barometertrycket nivå mäts i hPa eller mBar.

Det sedan prenumererar på följande MQTT ämnen;

  1. /EthernetDevice/SwVerCommand: När anmälan tas emot på detta ämne svarar enheten med en /EthernetDevice/SwVerConfirm publikation. Detta är en sändning svar. dvs. alla enheter kunde svara.
  2. /EthernetDevice/de: ad: vara: ef: fe: ed / SwVerCommand : när anmälan har mottagits av detta ämne enheten svarar med en /EthernetDevice/SwVerConfirm publikation. Detta är en riktad svar. dvs. endast denna enhet kommer att svara.
  3. /EthernetDevice/Led1Command: Produktionen ligger när anmälan har mottagits av detta ämne enheten ledde. Nyttolast '1' = Led på nyttolast "0" = Led av. När ett kommando har actioned kommer att enheten svara genom att publicera Led status via /EthernetDevice/Led1Confirm ämnet "På" eller "Off"
  4. /EthernetDevice/Button1Status : när anmälan av publikation tas emot på detta ämne enheten kommer att svara genom att publicera den aktuella knappen statusen via ett /EthernetDeviceButton1Command ämne "Tryckt" eller "Släppas". På detta sätt kan knappen status kontrolleras vid varje given tidpunkt. Notera även om tillståndet knappen ändras självständigt, via en knapptryckning då enheten automatiskt publicerar ett /EthernetDevice/Button1Command ämne.
  5. /EthernetDevice/SetTime: När anmälan av en publikation tas emot på detta ämne uppdaterar enheten systemklockan (DS1307Z +) med detta värde. Nyttolasten måste vara av formuläret "Hh: mm" (24 HR klocka).
  6. /EthernetDevice/SetDate: När anmälan av en publikation tas emot på detta ämne uppdaterar enheten systemklockan (DS1307Z +) med detta datumvärde. Nyttolasten måste vara i form "DD/MM/ÅÅ", UK format men kan lätt ändras.
  7. /EthernetDevice/SetLoggingCommand: När anmälan av en publikation tas emot på detta ämne uppdaterar enheten loggning tillståndsdatorn. En nyttolast på 0 = nära nuvarande logfile, 1 = öppen/starta ny loggfil. En ny loggfil namn bildas genom att sammanfoga DD/MM med hh: mm att bilda "DDMMHHMM.csv". På detta sätt bildas ett unikt filnamn på varje öppning. Som Arduino SD kort biblioteket har gamla DOS 8.3 filnamn konventionen begränsning, innebär detta att en period av minst en minut innan nya filen öppningar skall förlöpa. Annars är det möjligt att skriva över en tidigare öppnad fil (inom samma minuten). Inte en stor fråga men en värt att påpeka.
  8. /EthernetDevice/SetLoggingPeriodCommand: När anmälan av en publikation tas emot på detta ämne enheten kommer att uppdatera den system variabeln iLoggingPeriodInMinutes, som används för att styra perioden på vilka aktuella lokala Temp/fukt/BarometricPressure, Remote Temp/luftfuktighet loggas till SD-kort. Nyttolasten måste vara av formuläret "Hh: mm" (24 HR klocka).
  9. /EthernetDevice/GetLoggingStatus: När anmälan av en publikation tas emot på detta ämne enheten kommer att svara genom att publicera den aktuella statusen för loggning styra variabla currentLoggingStatus via /EthernetDevice/GetLoggingStatusConfirm ämne. Värdet "0" = logga inaktiva (eLoggingInactive) och '1' = loggning aktiverad (eLoggingActive). Denna räknas typ har specifikt vägda värden 0 och 1 för eLoggingInactive och eLoggingActive respektive, av helt enkelt lägga till numeriskt kompensera för Ascii '0' det returnerade värdet kommer att vara en '0' eller ' 1'.
  10. /EthernetDevice/GetLoggingPeriodStatus: När anmälan av en publikation tas emot på detta ämne att enheten svara genom att publicera den aktuella loggning perioden "Hh: mm" (24 HR klocka) format via ett /EthernetDevice/GetLogginPeriodConfirm ämne.
  11. /WiFiDevice/Temp1Status : liknar /EthernetDevice/Temp1Status , men innehåller IoT WiFi fjärrenheten temperatur
  12. /WiFiDevice/Humd1Status : som ovan i /EthernetDevice/Humd1Status men för luftfuktigheten på remote IoT WiFi-enhet.

När klar programvaran nu droppar in i en loop som övervakar mäklare anslutningar tillsammans med eventuella förändringar i knappen status logfile status, loggning periodens förändringar, loggning status uppdateringar (via MQTT ämne publikationer eller via en lokal knapptryckning att stänga eller öppna loggningsfilen), lokal temperatur eller luftfuktighet eller nya publikationer av avlägsen temperatur och luftfuktighet. En sammanfattning av lokala barometriskt tryck, temperatur och luftfuktighet förändringar både lokala och fjärranslutna, tillsammans med nuvarande CSV filnamn, datum och tid visas i systemet LCD i realtid och upprepas tillsammans med uppritade trender på TFT-systemet.

Hantering logga data till fil

Loggning av alla lokala temperatur, luftfuktighet, barometertryck och avlägsen temperatur, fuktighet görs i .csv form (kommaseparerade variabel) Detta är att möjliggöra direkt import till Microsoft Excel (TM) så att det blir relativt enkelt att skapa fina grafer för att visualisera de registrerade uppgifterna.

Loggningen styrs via användning av en "programvara stat maskin" som registrerar de olika staterna att loggning kan ockupera (dessa återspeglar räknas typ eLoggingStatusType eLoggingInactive, eLoggingActive, eLoggingInitialise och eLoggingFault). Ett diagram av denna stat maskin ingår ovan. De blå cirklarna är de olika staterna och linjer eller "övergångar" mellan dem Visa någon legitim post eller avsluta till eller från dessa stater. Texten ovanför varje övergång visar tillståndet för att flytta mellan staterna och texten under den övergång visar alla åtgärder som krävs för att flytta mellan stater.

Ändringar av loggning uppnås genom att ange variabel newLoggingStatus till staten av val och sedan anropa funktionen updateLogging() . Som kallas automatiskt på varje pass av den huvudsakliga loop().

Statliga maskin logiken i funktionen updateLogging() hand tar om den nödvändiga statliga övergångar och åtgärder som uppdaterar TFT- och LCD-skärmarna för byte av filnamn eller clearing loggfilnamnet om loggning avslutas.

Hantering av skärmen rullning

Skärmen rullning är ett intressant ämne så jag tänkte jag skulle lägga till några kommentarer om hur jag uppnått det.

Från andra diagrammet ovan har jag skildras en typisk serie av skärmen tomter från bilder 1... 5. här kan du se de data trend linje (gul) framsteg från vänster till höger på skärmen tills skärmen tomt 7 nås och vi har slut på minne för att spara de 7: e data Rita punkt. Enkel vi kan göra en lite längre matris som du säger. Sedan bara rita den nya punkten. Väl inte kan vi bara rita den nya punkten som det kommer att vara av visningen längst till höger som i skärmen 6. En lösning på detta skulle vara att använda huvudet och svans pekare (märkt här som H och T), sedan bara rensa skärmen och åter Rita alla punkter mellan svans och huvud. Det skulle fungera för att bläddra höger till vänster i skärmen tomt 7. Men det finns en annan grundläggande fråga med detta tillvägagångssätt, om inte vi besitter en Turingmaskin (https://en.wikipedia.org/wiki/Turing_machine) vi kan inte fortsätta att lägga till vår matris på obestämd tid. Vi behöver en mer effektiv algoritm.

Lösningen är att flytta huvudet (eller svans) pekaren tillbaka rundan till början av vår matris att lagra nästa Rita en gång det "faller bort slutet" i matrisen. På detta sätt kan en databuffert för fast storlek användas. Skärmen uppdateras sedan på exakt samma sätt som beskrivs ovan. Faktiskt den plottning görs från H-1 och T-1, men detta är en liten detalj. Se skärmen tomter 8 och 9.

I praktiken har vi skapat en "cirkulär" buffert från en "linjär". Se bild tre ovan.

Detta är exakt den algoritm som jag använde i funktionen updateTrendScreen() för att få skärmen för att bläddra från höger till vänster.

Naturligtvis jag lagt några tweaks för att optimera uppdatering och göra det flöde lite bättre, men dess i huvudsak samma.

Jag lämnade ut en liten kosmetisk optimering, du kan se det?

Se Steg
Relaterade Ämnen

"Koppleri" din första IoT WiFi-enhet. Del 4: Sakernas Internet, Home Automation

OK, inte så mycket koppleri men att utvidga din första IoT enhetIntroduktionDetta Instructable dokumenterar hur enkelt det är att utvidga och ytterligare utveckla en IoT enhet (bilden ovan) och är uppbyggd kring ESP8266-01 WiFi aktiverat modulen från...

Skapa din första IoT WiFi-enhet. Del 3: Sakernas Internet, Home Automation

Detta Instructable dokument hur man skapar en enkel IoT enhet (bilden ovan) baserat runt ESP8266-01 WiFi aktiverat modulen och är den tredje delen i en serie av Instructables beskriver hur du ställer in egna IoT hemnätverket.IoT enheten i fråga har e...

Att inrätta en MQTT mäklare. Del 2: Sakernas Internet, Home Automation

FörordOkej i "Del1: Sakernas Internet, Home Automation", du har skapat och konfigurerat din "Vanilj" Raspberry Pi (ursäkta ordvitsen) och kan fjärransluta till det med kitt. Nu ställer vi in en server som kommer att upprätta din huvuds...

Installation och konfiguration av OpenHAB. Del 6: Sakernas Internet, Home Automation

FörordSå, om du har följt de tidigare delarna (IoT - "Intranät" saker: Home Automation. Del1: IoT, introduktion och framåt) du kommer att ha dig en IoT nätverk liknar den som visas ovan (bild 2 och 3). I denna del kommer vi lägga sista touch. An...

Bygga din första IOT med en Raspberry Pi, DHT11 sensor och Thingspeak.

Sakernas Internet eller Internet of Things är ett hett ämne! Enligt experterna allt kommer att vara ansluten till internet och alla våra enheter och deras data snart kommer bara en IP-adress från oss. Så var börjar du om du vill utforska världen av S...

Raspberry Pi. Skapa din första ansluten ljus

Skapa din första anslutna ljus med hjälp av Raspberry Pi. Kontrollera och övervaka en anslutna ljus från mobil, Tablet PC och skrivbordet med Lelylan & MQTT. Det tar 15 minuter | $36 (eth) eller $44 (WiFi) i hårdvara | grundläggande nivå.Steg 1: hård...

Arduino Yun. Skapa din första anslutna ljus.

Skapa din första anslutna ljus med hjälp av Arduino Yun. Kontrollera och övervaka en anslutna ljus från mobil, Tablet PC och skrivbordet med Lelylan & MQTT. Det tar 15 minuter | $80 i hårdvara | grundläggande nivåSteg 1: hårdvaraFör att slutföra denn...

Med Repetier värd att ställa upp din Automatisk horisontering sond och skapa din första Print med Delta rostock mini

Idag kommer vi att dela hur Repetier värd att ställa upp din AutoLeveling sond och skapa din första Print med Delta rostock miniSteg 1: Anslut USB till din Rostock mini G2 eller G2s och driva upp. Du kan se LED-lampor och fläkt kommer till liv, du ka...

Skapa din första Program i Visual Basic

detta instructable visar dig hur man programmerar Microsoft Visual Basic 2005 Express Edition. Det exemplet som du skapar i dag är en enkel bildvisare.Om du gillar denna instructable vänligen tryck på + knappen på toppen av den instructable. Tack.Des...

Skapa din första mobila WebApp på bara 30 minuter

vi kan säga att den största skillnaden mellan en WebApp och en inföding App är att den första som körs i webbläsaren (t.ex. Safari) för enheten, som i de flesta fall tillgång till internet krävs, antingen via 3G eller Wifi, utan att behöva ladda ner...

Skapa din första C++-Program med hjälp av Visual Studio Express IDE

IntroduktionAnvändningen av datorprogram påverkar vår vardag. Datorer, smarta telefoner och tabletter drivs alla av ett program som någon skapat. Dessa program sträcker sig i svårigheter beroende på målet för den aktuella uppgiften. Men det finns ett...

Skapa din första iOS app

titta runt denna webbplats, slog det mig att det inte fanns många ' ibles på programmering iOS-plattform, så jag tänkte jag skulle fixa detta underskott. Detta är en enkel "hello, world!" app för iPhone (eller iPod Touch eller iPad). Detta "...

Skapa din egen Cat5e/Cat6 Ethernet-kablar

Skapa din egen CAT5e/CAT6 nätverkskabel är användbar färdighet och mycket lätt att lära. Nästan varje hem nu har sitt eget nätverk och att veta hur att säga upp din egna kablar kan du spara pengar samt ha kablar exakta längden till dina behov så inge...

Guide till hur man kan skapa och publicera din första iPhone app

mobila app industrin går på högvarv och Gartner har prognos att det kommer att nå 25 miljarder dollar i omsättning i slutet av detta år. Över en miljon människor en dag köpa en smartphone, och mer än en miljard apps hämtas varje dag.Här är de senaste...

Bygga din första Android ansökan

mer än någonsin tidigare, världen är mobila. Av denna mobil revolution är Android en av de bästa plattformarna. Tas ut av Google att konkurrera med Apples iOS, visar Android inga tecken på avmattning. Människor vill bygga apps som körs på Android. Du...

Kontrollera elektriska enheter från Android, Arduino och skapa din egen android app

Hej, vill du kontrollera alla dina elektriska apparater i hemmet styrs från din android mobil, vill du skapa din egen app för att uppnå denna uppgift, det här inlägget förklarar steg för steg procedur för att skapa android app för att kontrollera ele...

Planera din första grönsaksland: Del två

med din egen veggie trädgård kan inte bara vara en rolig och trevlig hobby, men det kan också leverera massor av färska grönsaker att lägga till dagliga måltider. I "Planera ditt första grönsak trädgård: del ett" talade jag om fattar beslut om m...

CyberSafe: Din personliga moln IoT plattform

Förvandla din gamla Raspberry Pi till en privat, Cloud ansluten IoT plattform som Thingspeak eller PubNub! Stream sensordata smidigt!Modeordet för de senaste två åren har varit IoT, och stora företag har varit snabba att hoppa på tåget. För programva...

Hur du gör din första 3d tryckt runda öppna manschetten armband!

Detta är en relativt rak vidarebefordra instructable på hur du kan göra din första 3d tryckt runt öppna manschetten armband och skriva ut den på din hem 3d skrivare eller genom en tjänst som Ponoko, i.materialise, Kraftwurx eller Shapeways. Jag komme...