TempBug: internet-verbonden thermometer (7 / 7 stap)

Stap 7: Graven in de Code


IMP firmwares zijn geschreven in een objectgeoriënteerde taal, genaamd van eekhoorn, die eruit ziet en voelt veel als JavaScript te gebruiken. Eekhoorn draait in een virtuele machine op de top van de imp OS binnen het GMB, dus runtimefouten zal niet uw apparaat offline knock, en u toegang hebt tot een heleboel leuke OS gebaseerde functies, zoals gebufferde seriële input en gemakkelijk één regel-API's in te stellen van GPIOs of communiceren met randapparatuur.

Een kijkje nemen op alle dingen die je in uw firmware imp doen kunt, check out de elektrische imp API: naslag en elektrische imp werkte voorbeelden pagina. Om te zien welke pinnen kunnen doen wat, Bekijk het imp pin mux.

Onze code hier is vrij eenvoudig. Hier is onze standaard werkwijze:

  • Sommige constanten instellen
  • Een klasse voor onze temperatuursensor definiëren
  • Instantiëren van onze klasse als een temperatuur sensor-object wilt maken
  • Lees de temperatuursensor
  • De datapoint verzenden de agent
  • Plannen ons wakker worden in een beetje en doe het allemaal weer

De constanten op 8 en 9 kijken een beetje-onheilspellend, maar ze zijn eenvoudig. Dit zijn de parameters voor uw thermistor - u vindt ze op het gegevensblad voor de thermistor die u gebruikt. Als u gebruikmaakt van de thermistor ik in verband met eerder, kun je zelfs de parameters die worden ingesteld al hier.

Lijnen 20 tot en met 71 zijn een klassendefinitie - dit is in feite een reeks instructies voor het uitvoeren van verschillende belangrijke dingen met een thermistor, zoals het lezen van de temperatuur. Dit komt rechtstreeks uit de github - het is een mooie, modulaire stukje code zodat het gemakkelijk kan worden hergebruikt.

Na dat moeten we alleen onze op hoog niveau logica te definiëren. Op lijnen 79 tot en met 83 configureren we de twee pinnen die we gebruiken. Herinner me uit toen we het apparaat bouwden-een van de pennen een pininschakelen , waarmee huidige doorheen kan stromen de thermistor is als het laagis ingesteld. De andere pin is onze analoge invoer pin, die we gebruiken zullen om te lezen de spanning over de thermistor.

 // Configure Pins // pin 8 is driven high to turn off temp monitor (saves power) or low to read therm_en_l <- hardware.pin8; therm_en_l.configure(DIGITAL_OUT); therm_en_l.write(1); // pin 9 is the middle of the voltage divider formed by the NTC - read the analog voltage to determine temperature temp_sns <- hardware.pin9; 

Op lijn 86 noemen we eerder op onze klassendefinitie uit als een thermistor-object wilt maken. Dit object neemt in de constanten die we eerder ingesteld, en methoden waarmee ons om te lezen van de temperatuur in Celsius of Fahrenheit.

 // instantiate our thermistor classmyThermistor <- thermistor(temp_sns, b_therm, t0_therm, 10, false); 

Lijnen 88-96 zijn waar de magie gebeurt - we inschakelen van de sensor, neem een lezing, stuur het naar de agent en uitschakelen van de sensor om opnieuw op te slaan batterij.

 therm_en_l.write(0); imp.sleep(0.001); local id = hardware.getdeviceid(); local datapoint = { "id" : id, "temp" : format("%.2f",myThermistor.read_f()), } agent.send("data",datapoint); therm_en_l.write(1); 

En tot slot, het plannen van een wakeup in vijftien minuten. Gaan we naar diepe slaap in de tussentijd, opslaan van de batterij:

 //Sleep for 15 minutes and 1 second, minus the time past the 0:15 //so we wake up near each 15 minute mark (prevents drifting on slow DHCP) imp.onidle( function() { //server.sleepfor(1 + 15 - (time() % (WAKEINTERVAL_MIN*15))); server.sleepfor(1 + WAKEINTERVAL_MIN*60 - (time() % (WAKEINTERVAL_MIN*60))); }); 

Dat is de firmware van het apparaat - Neem een blik bij de agent. Je hebt al gezien onderdeel van de agent - we stellen de Sparkfun openbare en Private sleutel lijnen 6 en 7 van de agent eerder. Onder dat hebben we een andere klassendefinitie; deze definieert de methoden voor interactie met een gegevensstroom van Sparkfun.

Lijnen 62 tot en met 65 zijn een echt interessant stukje code - dit is de haak die de agent gebruikt om te ontvangen van nieuwe gegevens van de temperatuur van het apparaat. Dit wordt gedaan door een agent "terugbellen" registreren met agent.on. Dit zegt, "wanneer het apparaat stuurt u een evenement genaamd 'temp', de volgende functie aanroepen met de gegevens gemarkeerd met dat label". Terugkijkend op lijn 95 van de firmware van het apparaat, zien we dat we gegevens gemarkeerd verzonden "temp" met een functie genaamd "agent.send". Dit is waar die gegevens ging!

 device.on("data", function(datapoint) { local resp = stream.push({"temp": datapoint.temp}); server.log(format("PUSH: %i - %s", resp.statuscode, resp.body)); }); 

Tot slot, we zien de agent twee dingen doen wanneer het voor het eerst beginnen te lopen. De eerste: het stuurt een log-bericht laten weten dat het begonnen en is klaar om gegevens te krijgen. Ten tweede, het instantieert een Sparkfun Data Stream-object met de klasse wij eerder hebt gedefinieerd, laten de methoden van die klassen gebruiken om gegevens te verzenden naar Sparkfun zoals het komt.

De agent niet opnieuw starten of slapen; het begint de eerste keer het apparaat laars met dit model, en blijft lopen voor altijd, elke nieuwe datapoint hanteren als het gaat door te bellen naar de terugbeloproep van de "device.on". Het is van het apparaat hersenen in de cloud!

Dat is de firmware! Geniet van uw nieuwe Internet-verbonden thermometer.

Gerelateerde Artikelen

ImPrinter: de elektrische Imp draadloze, internet-verbonden thermische printer

ImPrinter: de elektrische Imp draadloze, internet-verbonden thermische printer

thermische printers hebben gekregen (alweer) erg populair in de afgelopen paar maanden; veel mensen lijken te zijn heel geïnteresseerd in het hebben van relevante info pop omhooggaand op een kleine rol van thermisch papier in plaats van in de telefoo
Steampunk ESP8266 Internet verbonden klok met behulp van de Arduino IDE

Steampunk ESP8266 Internet verbonden klok met behulp van de Arduino IDE

Wat u krijgt wanneer een ring NeoPixel, een goedkope Arduino Wifi aan boord en een laser cutter in een stoom-Punk-Sedan lopen?Een modieuze Steampunk ontworpen Internet verbonden klok met behulp van de ESP8266 chip en de Arduino IDE natuurlijk!Hier is
Internet-verbonden joystick

Internet-verbonden joystick

vorige week, ik heb gepost een demo op het opbouwen van impBot, een eenvoudige pan/tilt servo "robot" gecontroleerd via het internet met de elektrische imp. Op het moment, alles wat ik had voor controlerende genoemde robot een potentiometer in e
Internet-verbonden huis energie monitor

Internet-verbonden huis energie monitor

Dit is een magische doos die laat u kunt controleren het stroomverbruik van uw huis vanaf elke locatie op het Internet! Het meet zowel vermogen (watt) en schijnbaar vermogen (VA), het houdt een lopend totaal van elektriciteit eenheden gebruikt, en ma
Internet-verbonden lichtschakelaar

Internet-verbonden lichtschakelaar

In deze tutorial zullen we laten zien hoe internet aangesloten switch maken met Raspberry Pi en Relais module. U kunt internet schakeloptie gebruiken om op afstand controle maximaal 17 apparaten (licht, kachel, sprinkler..) via internet. U hoeft geen
OpenTrashCan: Een slimme Internet verbonden prullenbak die praat

OpenTrashCan: Een slimme Internet verbonden prullenbak die praat

OpenTrashCan verbinding met uw wifi-netwerk en stuurt u een e-mail wanneer zijn volledige, tegen je praat, en kan zelfs worden bediend vanuit de OpenTrashCan App voor Android-telefoons. Zie het in actie hier:Willen kopen? Meld u aan voor de preorder
Aan de slag met Analog.IO en elektrische Imp

Aan de slag met Analog.IO en elektrische Imp

Analog.io is een nieuwe website gewijd aan het delen van gegevensstromen van internet van dingen aangesloten apparaten. Analog.io kunt u uw gegevens via een web-browser te bekijken, waar u ook in de wereld bent. U bepalen de gegevens die zijn uitgeze
IMP chef-kok: Internet-Connected BBQ-Thermometer

IMP chef-kok: Internet-Connected BBQ-Thermometer

toen ik een kind was, zouden we koken onze vakantie Turkije of gebraden met één van die weinig pop-up thermometers die u gewoon stok in de vogel, die opduikt wanneer de vogel (vermoedelijk) is gedaan, of op zijn minst veilig om te eten. We hadden een
Het hergebruiken van een oude wifi-router voor de internet-of-things

Het hergebruiken van een oude wifi-router voor de internet-of-things

De populariteit van internet verbonden apparaten gebouwd met Arduino shields of single-board computers zoals de Raspberry Pi en Beaglebone is geëxplodeerd, maar voor eenvoudige taken zoals een relais controle, het lezen van een sensor, Bewateren van
Internet Controlled Arduino (geen Ethernet-shield)

Internet Controlled Arduino (geen Ethernet-shield)

Ethernet schilden zijn een heleboel plezier, maar zij kunnen duur zijn. In dit project zal ik u tonen hoe om te controleren uw Arduino vanaf elke computer die is verbonden met het internet, zonder gebruik te maken van een Ethernet-shield. Dit project
ESP8266 - $5 internet aangesloten switch

ESP8266 - $5 internet aangesloten switch

In deze tutorial zullen we laten zien hoe bouwen WiFi internet aangesloten switch aangesloten op EasyIoT Cloud. Wij zullen gebruiken ESP8266, solid state relais en Arduino IDE. Switch kan worden gecontroleerd door de WEB application, native Android a
NeoPixel klok met SparkCore Internet knop Shield

NeoPixel klok met SparkCore Internet knop Shield

De Spark Core Internet knop Shield alleen heeft 11 NeoPixel LEDs, maar heeft ruimte voor en praktisch schreeuwt voor de 12e LED om de cirkel compleet.En wat is er leuker dan het maken van een fascinerende klok met Internet verbonden LEDs?!HackBergen
Arduino Internet gecontroleerde Led van

Arduino Internet gecontroleerde Led van

HalloIn dit project i 'm going to control leidde's via een webpagina's. U kunt uw browser openen en beheren van de led.De code die verleend wanneer geüpload en met het internet verbonden maakt het een webserver in uw LAN en u gewoon gebruik maken van
RabbitPi - de Alexa ingeschakeld, IFTTT verbonden, oor-Wiggling IoT assistent

RabbitPi - de Alexa ingeschakeld, IFTTT verbonden, oor-Wiggling IoT assistent

Dit is een verouderde 2005 Nabaztag "slimme konijn" die ik heb omgebouwd tot een moderne IoT-assistent met behulp van een Raspberry Pi 3 en een Motor hoed van Adafruit, met een webcam microfoon en een luidspreker van de Philips Soundshooter verv