Comment mesurer le confort thermique avec Imp électrique et Ubidots (5 / 10 étapes)

Étape 5: Code de l’appareil

Nous allons commencer à coder ! Lorsque vous travaillez avec imp électrique, vous aurez besoin de deux sections du code : une pour le périphérique et un autre pour l’agent. Merci à Thomas Byrne pour la fourniture de la classe pour gérer le capteur DHT11 dans Github. Voici le code de l’appareil (un peu long car il a la classe pour gérer les DHT11) :

 <br><p>const SPICLK = 937.5;<br>// Class to read the DHT11 temperature/humidity sensor // These sensors us a proprietary one-wire protocol. The imp // emulates this protocol with SPI. // To use: // - tie MOSI to MISO with a 10k resistor // - tie MISO to the data line on the sensor class DHT11 { static STARTTIME_LOW = 0.001000; // 1 ms low time for start static STARTTIME_HIGH = 0.000020; // 20 us min high time for start static STARTTIME_SENSOR = 0.000080; // 80 us low / 80 us high "ACK" from sensor on START static MARKTIME = 0.000050; // 50 us low pulse between 0 or 1 marks static ZERO = 0.000026; // 26 us high for "0" static ONE = 0.000075; // 70 us high for "1" spi = null; clkspeed = null; bittime = null; bytetime = null; start_low_bits = null; start_low_bytes = null; start_high_bits = null; start_high_bytes = null; start_ack_bits = null; start_ack_bytes = null; mark_bits = null; mark_bytes = null; zero_bits = null; zero_bytes = null; one_bits = null; one_bytes = null; // class constructor // Input: // _spi: a pre-configured SPI peripheral (e.g. spi257) // _clkspeed: the speed the SPI has been configured to run at // Return: (None) constructor(_spi, _clkspeed) { this.spi = _spi; this.clkspeed = _clkspeed; bittime = 1.0 / (clkspeed * 1000); bytetime = 8.0 * bittime; start_low_bits = STARTTIME_LOW / bittime; start_low_bytes = (start_low_bits / 8); start_high_bits = STARTTIME_HIGH / bittime; start_high_bytes = (start_high_bits / 8); start_ack_bits = STARTTIME_SENSOR / bittime; start_ack_bytes = (start_ack_bits / 8); mark_bits = MARKTIME / bittime; mark_bytes = (mark_bits / 8); zero_bits = ZERO / bittime; zero_bytes = (zero_bits / 8); one_bits = ONE / bittime; one_bytes = (one_bits / 8); } // helper function // given a long blob, find times between transitions and parse to // temp and humidity values. Assumes 40-bit return value (16 humidity / 16 temp / 8 checksum) // Input: // hexblob (blob of arbitrary length) // Return: // table containing: // "rh": relative humidity (float) // "temp": temperature in celsius (float) // if read fails, rh and temp will return 0 function parse(hexblob) { local laststate = 0; local lastbitidx = 0; local gotack = false; local rawidx = 0; local result = blob(5); // 2-byte humidity, 2-byte temp, 1-byte checksum local humid = 0; local temp = 0; // iterate through each bit of each byte of the returned signal for (local byte = 0; byte < hexblob.len(); byte++) { for (local bit = 7; bit >= 0; bit--) { local thisbit = (hexblob[byte] & (0x01 << bit)) ? 1:0; if (thisbit != laststate) { if (thisbit) { // low-to-high transition; watch to see how long it is high laststate = 1; lastbitidx = (8 * byte) + (7 - bit); } else { // high-to-low transition; laststate = 0; local idx = (8 * byte) + (7 - bit); local hightime = (idx - lastbitidx) * bittime; // we now have one valid bit of info. Figure out what symbol it is. local resultbyte = (rawidx / 8); local resultbit = 7 - (rawidx % 8); //server.log(format("bit %d of byte %d",resultbit, resultbyte)); if (hightime < ZERO) { // this is a zero if (gotack) { // don't record any data before the ACK is seen result[resultbyte] = result[resultbyte] & ~(0x01 << resultbit); rawidx++; } } else if (hightime < ONE) { // this is a one if (gotack) { result[resultbyte] = result[resultbyte] | (0x01 << resultbit); rawidx++; } } else { // this is a START ACK gotack = true; } } } } } //server.log(format("parsed: 0x %02x%02x %02x%02x %02x",result[0],result[1],result[2],result[3],result[4])); humid = (result[0] * 1.0) + (result[1] / 1000.0); if (result[2] & 0x80) { // negative temperature result[2] = ((~result[2]) + 1) & 0xff; } temp = (result[2] * 1.0) + (result[3] / 1000.0); if (((result[0] + result[1] + result[2] + result[3]) & 0xff) != result[4]) { return {"rh":0,"temp":0}; } else { return {"rh":humid,"temp":temp}; } } // read the sensor // Input: (none) // Return: // table containing: // "rh": relative humidity (float) // "temp": temperature in celsius (float) // if read fails, rh and temp will return 0 function read() { local bloblen = start_low_bytes + start_high_bytes + (40 * (mark_bytes + one_bytes)); local startblob = blob(bloblen); for (local i = 0; i < start_low_bytes; i++) { startblob.writen(0x00,'b'); } for (local j = start_low_bytes; j < bloblen; j++) { startblob.writen(0xff,'b'); } //server.log(format("Sending %d bytes", startblob.len())); local result = spi.writeread(startblob); return parse(result); } } rele <- hardware.pin9; spi <- hardware.spi257;</p><p>while(1){ clkspeed <- spi.configure(MSB_FIRST, SPICLK); dht11 <- DHT11(spi, clkspeed); data <- dht11.read(); server.log(format("Relative Humidity: %0.1f",data.rh)+" %"); server.log(format("Temperature: %0.1f C",data.temp)); agent.send("temp",data.temp); imp.sleep(1);</p><p>}</p> 

Articles Liés

Dispositif d’impression : l’imprimante thermique de Imp électrique, sans fil, connecté à internet

Dispositif d’impression : l’imprimante thermique de Imp électrique, sans fil, connecté à internet

imprimantes thermiques ont obtenu (encore) très populaires dans les derniers mois ; beaucoup de gens semble être tout à fait intéressé à avoir des infos pertinentes sautent vers le haut sur une petite bobine de papier thermique au lieu de dans les al
Capteur de température sans fil simple mise à jour de site web avec imp électrique et thermistance

Capteur de température sans fil simple mise à jour de site web avec imp électrique et thermistance

[Edit 2014] L'urbaniste qui a été utilisé par Imp électrique n'est plus utilisé et n'est pas disponible plus. [/ Edit]Il s'agit d'un petit projet pour vous aider à démarrer avec l'imp électrique et une thermistance, ainsi vous pouvez voir comment vou
Donner - (Imp électrique alimenté) Internet connecté à la prise

Donner - (Imp électrique alimenté) Internet connecté à la prise

Cet Instructable va vous montrer comment raccorder un Intérrupteur queue II jusqu'à un Imp électrique et de construire une page Web simple pour tout contrôler !L'intérrupteur permet de que vous passer de courant alternatif avec un circuit de commande
Câblage et programmation de l’Imp électriques avec un écran LCD

Câblage et programmation de l’Imp électriques avec un écran LCD

fixer un écran LCD à un diablotin électriqueWhats un diablotin électrique ?Il s'agit d'un processeur de Wifi branché dans un super petit paquet. Consultez le site Web pour plus d'informations - Imp électriqueJ'ai acheté le LCD série Sparkfun Enabled
IMP-ERSONATOR : Imp électrique + Arduino + bouclier vague = distance lecteur de fichier audio

IMP-ERSONATOR : Imp électrique + Arduino + bouclier vague = distance lecteur de fichier audio

ce Instructable vous montrera comment fabriquer un lecteur de fichier audio à distance activé.Il utilise un diablotin électrique, un bouclier de vague Adafruit et un Arduino UnoL'Imp électrique vous permet de connecter rapidement des périphériques (y
Imp électrique pour commander 8 lumières électriques utilisant internet

Imp électrique pour commander 8 lumières électriques utilisant internet

ce projet utilise l'Imp électriques neuves (et super cool).  En WiFi, via internet, vous pouvez 120VAC électriques télécommandes Imp Cloud.  L'Imp envoie une chaîne de série de bits à une « Série de parallèles » puce de sortie numérique (commercialis
Affichage de WiFi progrès Imp électrique

Affichage de WiFi progrès Imp électrique

Nous sommes tombés au hasard à un système de récompense de crème glacée à la maison. Apportant de bonnes notes moyen maison nous faire sortir pour la crème glacée. Pas sûr qu'il s'agit d'un système de récompense politiquement correct, mais c'est un é
Comment faire un Lift de Hatch bateau électrique

Comment faire un Lift de Hatch bateau électrique

comment faire un Lift de Hatch bateau électriquePar un client de Firgelli Automations IncMes années de navigation avancée ainsi que de mon âge, que j'avais remarqué qu'une trappe d'accès de gros moteur est devenu tout à fait un peu heaver que je me s
Créer votre propre lumière intelligente à l’aide de Imp électrique

Créer votre propre lumière intelligente à l’aide de Imp électrique

Créez votre propre lumière intelligente à l'aide de Imp électrique. Apprendre à contrôler et gérer l'éclairage depuis un téléphone mobile, tablette et bureau en 15 minutes. 44 $ en matériel. Niveau d'entrée.Étape 1: matérielPour compléter ce tutoriel
Hack-A-lampe ou comment contrôler l’Arduino avec votre smartphone

Hack-A-lampe ou comment contrôler l’Arduino avec votre smartphone

J'ai eu une lampe ikea dans mon condo, il fonctionne bien, s'allume, s'éteint... qu'elle ne. C'est ennuyeux kindy, n'est-il pas ? Je pensais, que se passe-t-il si j'ai le hack ? LED RGB viennent alors à ma tête et les idées ont commencé à s'écouler.A
DMX de l’Imp électrique

DMX de l’Imp électrique

L'Imp électrique est un fantastique petit compatible wifi microcontrôleur. C'est un peu comme avoir un Arduino, un bouclier de WiFi et un service de Cloud dans un seul paquet.Vous n'obtenez pas autant de contrôle complet processeur comme sur l'Arduin
Getting Started with Analog.IO et Imp électrique

Getting Started with Analog.IO et Imp électrique

Analog.IO est un nouveau site dédié au partage de flux de données de l'internet des choses périphériques connectés. Analog.IO vous permet d'afficher vos données grâce à un navigateur web où que vous soyez dans le monde. Vous contrôlez les données qui
Comment mesurer le commutateur de polarité

Comment mesurer le commutateur de polarité

Afin d'utiliser une planche Switcheroo avec un dispositif de commande à distance, vous avez besoin de le connecter à l'interrupteur électrique assis sous le bouton que vous souhaitez contrôler l'appareil en question. Cet exemple montre comment mesure
Comment faire pour teinture fil avec de la nourriture à colorier (Plus autres trucs!)

Comment faire pour teinture fil avec de la nourriture à colorier (Plus autres trucs!)

Il semble que partout où vous regardez (ok, peut-être pas partout, peut-être juste sur pinterest), il y a un tutoriel sur comment faire pour teindre la laine avec Kool Aid. Quand j'ai vu que vous pourriez faire que, je l'avoue, je suis assez excité.