Inhoudsopgave:

WiFi-temperatuurlogger (met ESP8266): 11 stappen (met afbeeldingen)
WiFi-temperatuurlogger (met ESP8266): 11 stappen (met afbeeldingen)

Video: WiFi-temperatuurlogger (met ESP8266): 11 stappen (met afbeeldingen)

Video: WiFi-temperatuurlogger (met ESP8266): 11 stappen (met afbeeldingen)
Video: thuishulp | maak sonoff power r2 sensor thuisassistent 2024, Juli-
Anonim
Image
Image
Materialen
Materialen

Hallo, leuk je hier te zien. Ik hoop dat je in deze instructable wat nuttige informatie zult vinden. Voel je vrij om me suggesties, vragen, … te sturen Hier zijn enkele basisgegevens en een snel overzicht van het project. Voor mobiele gebruikers: Video. Laat me weten wat je van het project vindt in het commentaargedeelte, bedankt. Ik heb onlangs een NodeMcu (op esp8266 gebaseerd) bord gekocht om het eens te proberen, dus dit is niet echt een geavanceerd project. Maar het werkt en het is wat ik nodig heb, dus het is ok. De belangrijkste functie van deze datalogger is het verzamelen van temperatuur en het opslaan op een server. Hierdoor kunnen gebruikers gegevens en grafieken online bekijken, zelfs als ze zich niet op dezelfde locatie van de logger bevinden (bijvoorbeeld voor een weerstation). Een andere handige functie is de OTA-update die in de code is opgenomen, waarmee de gebruiker de software eenvoudig kan updaten en aanpassen. Ik zal twee sensoren en hun bijbehorende acquisitiemethode analyseren om een balans te maken tussen alle voor- en nadelen.

Spoiler: na een beetje testen ontdekte ik dat een digitale sensor zoals de DS18B20 de beste oplossing is omdat deze stabiliteit en een hogere nauwkeurigheid biedt. Het is al waterdicht en met de kabel.

Stap 1: Materialen

Materialen
Materialen
Materialen
Materialen
Materialen
Materialen

Dit is een minimaal project met slechts weinig externe componenten, hiervoor zal de stuklijstlijst erg kort zijn. Laten we echter eens kijken welk materiaal wordt gevraagd:

  • NodeMcu V3 (of een compatibele ESP8266 μprocessor);
  • RGB led (gemeenschappelijke anode);
  • Weerstanden voor led (1x10Ω, 1x22Ω, 1x100Ω, 1x10kΩ)
  • DS18B20 (Maxim Geïntegreerde thermometer);
  • LM35 (Texas Instrument-thermometer);
  • Externe batterij (optioneel);
  • Kabel;
  • Connector (om het meer "geavanceerd" te maken);
  • Box (optioneel, nogmaals om het meer "geavanceerd" te maken);
  • Led houder (optioneel);

Opmerking: zoals ik al zei, moet u een van de twee methoden kiezen. Als je de LM35-thermometer kiest, heb je nog een paar andere componenten nodig:

  • Attiny45/85;
  • AVR programmeur (of Arduino als ISP);
  • Weerstand (1x1kΩ, 1x2kΩ, 1x10kΩ, 1x18kΩ)
  • 2,54 mm stripconnector (optioneel)
  • Diode (2x1N914)
  • Perfboard of PCB;

Stap 2: De sensor kiezen

De sensor kiezen
De sensor kiezen

Het kiezen van de sensor kan een moeilijke stap zijn: tegenwoordig zijn er talloze transducers (TI biedt 144 verschillende elementen), zowel analoog als digitaal met verschillende temperatuurbereiken, nauwkeurigheid en behuizing. Analoge sensoren (46 onderdelen verkrijgbaar bij TI): Voordelen:

  • De datalogger kan eenvoudig worden gewijzigd van temperatuur naar een andere grootheid (spanning, stroom, …);
  • Mag iets goedkoper zijn;
  • Gemakkelijk te gebruiken omdat er geen speciale bibliotheek voor nodig is;

nadelen:

  • Vereisen ADC (die de nauwkeurigheid van de meting kan beïnvloeden) en andere externe componenten. Aangezien esp8266 slechts één ADC heeft (en niet echt nauwkeurig), zou ik willen voorstellen om een externe te gebruiken.
  • Vereist een speciale kabel met ruisonderdrukking, omdat elke inductiespanning het resultaat kan veranderen.

Na een beetje nadenken besloot ik om LM35 te gebruiken, een lineaire sensor met een schaalfactor van +10mV/°C met een nauwkeurigheid van 0,5°C en een zeer lage stroom (ongeveer 60uA) met een bedrijfsspanning van 4V tot 30V. Voor meer details raad ik aan om de datasheet te bekijken: LM35.

Digitale sensoren (sterk aanbevolen)Voors:

Bijna alle externe componenten nodig;

Geïntegreerde ADC

nadelen:

Vraag bibliotheek of software aan om het digitale signaal te decoderen (I2C, SPI, Serial, One Wire, …);

Duurder;

Ik heb voor de DS18B20 gekozen omdat ik een set van 5 waterdichte sensoren op Amazon heb gevonden en omdat deze veel is gedocumenteerd op internet. Belangrijkste kenmerk is 9-12bit meting, 1-draads bus, 3,0 tot 5,5 voedingsspanning, 0,5°C nauwkeurigheid. Nogmaals, voor meer details is hier de datasheet: DS18B20.

Stap 3: LM35

LM35
LM35
LM35
LM35
LM35
LM35

Laten we analyseren hoe ik de externe ADC en andere functies voor de LM35-thermometer heb geïmplementeerd. Ik vond een kabel met drie draden, één met afscherming en twee zonder. Ik besloot een ontkoppelingscondensator toe te voegen om de voedingsspanning bij de sensor te stabiliseren. Om analoge temperatuur om te zetten in digitaal, heb ik Attiny85-microprocessor in een dip8-pakket gebruikt (voor meer informatie zie de datasheet: attiny85). Het belangrijkste voor ons is de 10-bit ADC (niet echt de beste, maar voldoende nauwkeurig voor mij). Om te communiceren met Esp8266 heb ik besloten om seriële communicatie te gebruiken, rekening houdend met het feit dat esp8266 werkt met 3.3V en attiny85 op 5V (omdat het de sensor van stroom moet voorzien). Om dat te bereiken heb ik een eenvoudige spanningsdeler gebruikt (zie schema). Om de negatieve temperatuur te lezen, moeten we een aantal externe componenten toevoegen (2x1N914 en 1x18k weerstand), omdat ik geen negatieve voeding wil gebruiken. Hier is de code: TinyADC-repository. Opmerking: om deze code te compileren, moet u deze installeren attiny to ide (voeg dit toe in optie: https://drazzy.com/package_drazzy.com_index.json), als je niet weet hoe je het moet doen, zoek dan gewoon op Google. Of upload het.hex-bestand rechtstreeks.

Stap 4: DS18B20

DS18B20
DS18B20
DS18B20
DS18B20
DS18B20
DS18B20
DS18B20
DS18B20

Ik kocht die sensoren van Amazon (5 kost ongeveer 10 €). Het kwam aan met een roestvrijstalen hoes en een kabel van 1 m lang. Deze sensor kan 9 tot 12 bit temperatuurgegevens retourneren. Veel sensoren kunnen op dezelfde pin worden aangesloten omdat ze allemaal een unieke ID hebben. Om de DS18B20 op esp8266 aan te sluiten, volgt u het schema (tweede foto). Sinds ik heb besloten dat mijn logger drie sondes zou hebben gehad, moest ik onderscheiden welke welke is. Dus ik dacht om ze een kleur te geven die via software aan hun adres is gekoppeld. Ik heb een thermokrimpbare buis gebruikt (derde foto).

Stap 5: ESP8266-code

ESP8266-code
ESP8266-code
ESP8266-code
ESP8266-code

Omdat ik nieuw ben in deze wereld, heb ik besloten om veel bibliotheken te gebruiken. Zoals gezegd in de inleiding zijn de belangrijkste kenmerken:

  • OTA-update: u hoeft esp8266 niet telkens op uw computer aan te sluiten als u de code moet uploaden (u hoeft dit alleen de eerste keer te doen);
  • Draadloos beheer, als het draadloze netwerk verandert, hoeft u de schets niet opnieuw te uploaden. U kunt eenvoudig opnieuw de netwerkparameters configureren die verbinding maken met het esp8266-toegangspunt;
  • Thingspeak gegevensoverdracht;
  • Zowel LM35 als DS18B20 ondersteund;
  • Eenvoudige gebruikersinterface (RGB-led geeft nuttige informatie aan);

Excuseer me alstublieft, want mijn software is niet de beste en het is niet echt goed geordend. Voordat u naar het apparaat uploadt, moet u enkele parameters wijzigen om de code aan uw instellingen aan te passen. Hier kunt u de software downloaden. Gemeenschappelijke LM35- en DS18B20-configuratie U moet pindefinitie, token, kanaalnummer, gebruiker en wachtwoord wijzigen voor OTA-update. Lijn van 15 tot 23.

#define red YOURPINHERE #define green YOURPINHERE

#define blue YOURPINHERE const char* host = "selecteer hostadres"; //niet echt nodig, je kunt esp8266-webupdate const char* update_path = "/firmware" laten; // om het adres voor het updaten te wijzigen ex: 192.168.1.5/firmware const char* update_username = "YOURUSERHERE"; const char* update_password = "YOURPASSWORDHERE; unsigned long myChannelNumber = CHANNELNUMBERHERE; const char * myWriteAPIKey = "WRITEAPIHERE";

Stap 6: ESP8266-code: LM35-gebruiker

U moet het attiny-bord aansluiten op esp8266, om de ADC-eenheid van stroom te voorzien, gebruikt u de VU-pin en G-pin. U moet kiezen welke pin u wilt gebruiken voor seriële communicatie (om de hardware serieel vrij te houden voor foutopsporingsdoeleinden). Tx-pin moet worden geselecteerd, maar wordt niet echt gebruikt. (Lijn 27). SoftwareSerial mySerial (RXPIN, TXPIN); Bovenaan moet je toevoegen:#define LM35USER

Stap 7: ESP8266-code: DS18B20-gebruiker

Als eerste bewerking moet u het apparaatadres voor elke sensor identificeren. Compileer en programmeer deze code naar de esp en kijk in serie voor de resultaten. De code is hier te vinden (zoek naar deze titel op de pagina: «Lees individuele DS18B20 interne adressen»). Sluit slechts één sensor aan om het adres te verkrijgen, de resultaten zouden ongeveer als volgt moeten zijn (willekeurig nummer hier! Net als voorbeeld): 0x11, 0x22, 0x33, 0xD9, 0xB1, 0x17, 0x45, 0x12Dan moet u mijn code wijzigen in de sectie " Configuratie voor DS18B20" (lijn 31 tot 36)":

#define ONE_WIRE_BUS ONEWIREPINHERE #define TEMPERATURE_PRECISION TEMPBITPRECISION //(van 9 tot 12) #define delayDallas READINTERVAL //(In milliseconden, minimum is 15s of 15000mS) DeviceAddress blueSensor = { 0x11, 0x22, 0x33,x 0x12}; // WIJZIG MET UW ADRES DeviceAddress redSensor = { 0x11, 0x22, 0x33, 0xD9, 0xB1, 0x17, 0x45, 0x12}; // WIJZIG MET UW ADRES DeviceAddress greenSensor = {0x11, 0x22, 0x33, 0xD9, 0xB1, 0x17, 0x45, 0x12 }; //WIJZIG MET UW ADRES Bovenaan moet u toevoegen:#define DSUSER

Stap 8: ESP8266 Kleine truc

ESP8266 Kleine truc
ESP8266 Kleine truc

Na een beetje testen ontdekte ik dat als je esp8266 aansluit zonder te programmeren, de code pas wordt uitgevoerd als je eenmaal op reset drukt. Om dit probleem op te lossen, ontdekte ik na wat onderzoek dat je een pull-up weerstand van 3.3V naar D3 moet toevoegen. Hierdoor weet de processor dat de code uit het flashgeheugen moet worden geladen. Met deze methode kan D3 rechtstreeks worden gebruikt voor gegevensinvoer voor DS18B20-sensoren.

Stap 9: Eerste keer gebruik

Eerste keer gebruik
Eerste keer gebruik
Eerste keer gebruik
Eerste keer gebruik

Als je de code correct hebt geüpload maar nooit de Wifi Manager-bibliotheek gebruikt, is het tijd om je wifi-verbinding te configureren. Wacht tot je de RGB-led sneller ziet knipperen dan voorheen, zoek dan met je mobiel of pc het wifi-netwerk genaamd "AutoConnectAp" en maak verbinding. Na verbinding, open een webbrowser en voer 192.168.4.1 in, je vindt de GUI-interface van wifi manager (zie foto's) en druk op "Wifi configureren". Wacht tot esp8266 wifi-netwerken zoekt en selecteer de gewenste. Voer het wachtwoord in en druk op "opslaan". Esp8266 zal opnieuw opstarten (maakt niet uit welke RGB led deze keer is omdat het wat willekeurige informatie zal weergeven) en verbinding maken met het netwerk.

Stap 10: Conclusie

Conclusie
Conclusie
Conclusie
Conclusie
Conclusie
Conclusie
Conclusie
Conclusie

Uiteindelijk is hier een grafiek van de datalogger in actie terwijl ik de temperatuur van mijn vriezer registreerde. In oranje is de DS18B20 en in blauw de LM35 en zijn circuit. Je kunt het grootste verschil in nauwkeurigheid zien van digitale naar analoge sensor (met mijn slechte "ADC-circuit") die wat niet-fysieke gegevens geeft. Samenvattend, als je deze logger wilt bouwen, raad ik aan om de DS18B20 digitale temperatuursensor te gebruiken, omdat het gemakkelijker te lezen en bijna "plug and play", het is stabieler en nauwkeuriger, het werkt op 3,3 V en vereist slechts één pin voor veel sensoren. Bedankt voor de aandacht, ik hoop dat dit project goed voor je is en je hebt wat nuttige informatie gevonden. En voor wie het wil realiseren, ik wou dat ik alle benodigde informatie had gegeven. Als je niet vrij bent om alles te vragen, beantwoord ik graag alle vragen. Aangezien ik geen Engels spreker ben, laat het me weten als er iets mis is of niet te begrijpen is. Als je dit project leuk vond, stem er dan op voor de wedstrijden en/of laat een reactie achter ☺. Het zal me aanmoedigen om nieuwe inhoud te blijven updaten en publiceren. Bedankt.

Aanbevolen: