Intellekten Galileo-väderstation (4 / 5 steg)

Steg 4: Ladda upp och konfigurera kod

  1. Öppna weather_to_led.ino i din Arduino IDE och konfigurera efter saker
    • LED-portar (The PWM hamnar i din styrelse är markerade med en [ ~ ])
    • Knappen port
    • Insomningstid
    • Kanske ändra skriptet och config filen sökväg
  2. Öppna mail.py via ssh. Ändra sedan de 6 variabler som definierats på toppen av skriptet
    • SMTPServerUrl är adressen till din SMTP-server
    • SMTPServerPort är portnumret för SMTP-servern
    • SMTPUsername är användarnamnet för kontot
    • SMTPPassword är lösenordet till ditt e-postkonto
    • EmailAddress är e-postadressen till ditt e-postkonto
    • Ämnet är föremål för den post som skickas av detta skript
    • Obs: Anslutningen är inte RF. Information är inte krypterade
  3. Öppna config.txt via ssh. Config systemet förklaras i följande codeblock:

CITY_NAME_LED
CITY_NAME1; MIN_TEMP; MAX_TEMP; MIN_CLOUDS; MAX_CLOUDS; MIN_RAIN; MAX_RAIN; MEDDELANDE; E-POST;
CITY_NAME2;...
[...]
[TOM RAD]

  • CITY_NAME_LED är namnet på staden vars väder ska visas via lysdioder.
  • Varje följande rad anger ett meddelande som ska skickas till den e-post de givna förutsättningar * enligt väderdata hämtas från staden definieras på raderna börjar. (CITY_NAME1 i kodblocket)
  • Temperaturen mäts i Celsius, molnen i procent (0% = blå himmel) och regn mäts i mm per kvadratmeter, minskat under de senaste 3 timmarna.

* Det innebär att för varje uppmätt värde x bör MIN_VALUE < = x och x < = MAX_VALUE.

weather_to_led.ino:

#define MAX_MESSAGE_LENGTH 128
#define MAX_CITY_LENGTH 20
#define MAX_COMMAND_LENGTH (MAX_CITY_LENGTH + 30)
#define MAX_MAILADDR_LENGTH 30
#define SLEEP_TIME 3600
#define LOOP_DELAY 250
#define BUTTON_PIN 2
char SCRIPT_FILE [] = "/ home/root/weather.py";
char CONFIG_FILE [] = "/ home/root/config.txt";
char MAIL_FILE [] = "/ home/root/mail.py";
/*
* Innehåller de IO portnummer för en RGB-LED. Vi använder portar med
* PWM att blanda färger.
* Port 0 innebär detta LED inte används eller ansluten.
*/
struct RGB_LED {
int röda;
int grönt;
int blå;
};
/*
* Förklaring av våra 3 används led's. Varje använder endast två portar. Så vi
* är ansluta tre ledde 's till 6 PWM portar.
*/
struct RGB_LED temp = {3, 0, 5};
struct RGB_LED regn = {0, 6, 9};
struct RGB_LED moln = {0, 10, 11};
struct väder {
float härda;
float moln;
float regn;
};
/*
* Gör en ledde. Därtill pinmode ist inställd
* utgång.
* led struct med portnummer
*/
void init_rgb_led (struct RGB_LED ledde) {
Ange var ledde hamn till utgång
om (led.red! = 0) pinMode (led.red, produktionen);
om (led.green! = 0) pinMode (led.green, produktionen);
om (led.blue! = 0) pinMode (led.blue, produktionen);
Switch ledde är off
set_rgb_led ledde (, 0, 0, 0);
}
/*
* Anger färg på en specifik ledde. Vi använder analogWrite och PWM till
* Blanda färgerna.
* Det ledde strukt bör ha initierats före.
* led struct med portnummer och r, g, b värden, som bör vara
* set
*/
void set_rgb_led (struct RGB_LED ledde, int r, int g, int b) {
Skriver de givna värdena på våra portar. Värdet måste vara inverterad,
orsakas av vår konstruktion.
om (led.red! = 0) analogWrite (led.red, 255 - r);
om (led.green! = 0) analogWrite (led.green, 255 - g);
om (led.blue! = 0) analogWrite (led.blue, 255 - b);
}
/*
* Ges en temperatur i celsius visar denna funktion värdet
* genom att blanda rätt färger tillsammans.
* grader från 0 till 25
*/
void set_temp (int grad) {
int värde;
Skala: 0 < = examen < = 25
om grad (grad > 25) = 25;
om grad (grad < 0) = 0;
Beräkna värdet LED. (25 * 1
värde = examen * 10;
Röd led var till ljust. Så dess värde är delat med 2
set_rgb_led (temp, värde/2, 0, 255 - värde);
}
/*
* Ges en propability denna funktion
* Visar värdet genom att blanda rätt färger tillsammans.
* propability som värde från 0 till 100
*/
void set_rain (int procent) {
int värde;
Acceptera endast värden mellan 0 och 100 grader
om (procent > 100) procent = 100;
om (procent < 0) procent = 0;
värde = (procent * 255) / 100;
set_rgb_led (regn, 0, 255 - värde, värde);
}
/*
* Ges en propability denna funktion
* Visar värdet genom att blanda rätt färger tillsammans.
* propability som värde från 0 till 100
*/
void set_clouds (int procent) {
int värde;
om (procent > 100) procent = 100;
om (procent < 0) procent = 0;
värde = (procent * 255) / 100;
set_rgb_led (moln, värde, värde, 255 - värde); Ruttna durch Verdratung
}
/*
* Denna funktion använder ett python-skript för att skicka ett meddelande till en viss e-postadress
* inklusive nuvarande väder informationer.
*
* meddelande är en pekare till våra Meddelandesträngen
* w är ett väder struct som innehåller aktuella informationer
* mailaddr är en pekare till våra mål e-strängen
*/
char send_weather_mail (char * meddelande, struct väder w, char * mailaddr) {
Fil * fp;
char buf [1024];
Förbereda en stor sträng, som innehåller kommandot
om (snprintf (buf, 1024,
"python2.7 %s '%s'" nya väder informations:\n%s\n\nCurrent Väder: \nTemperature: %.1fC\nRaining: % dmm (sista 3 h) \nClouds: %d %%'",
MAIL_FILE, mailaddr, meddelande, w.temp, w.rain, w.clouds) < = 0) {
Return 0;
}
Öppna en pipa och kör kommandot
FP = popen (buf, "r");
om (fp == NULL) {
Return 0;
}
Nästa stänga den
om (pclose(fp)! = 0) {
Return 0;
}
tillbaka 1.
}
/*
* Med tanke på en stad och ett väder struct, läser denna metod
* aktuella vädret värden och fyller strukt med dessa.
* Namnet på en stad som sträng
* Pekare till en väder struct
*
* 0 på misslyckande och annars är det en framgång
*/
int readWeather (char * stad, struct väder * w) {
Fil * fp;
char buf [MAX_COMMAND_LENGTH + 1];
Bygga kommandosträngen som, genom att addera sökväg och staden
om (snprintf (buf, (MAX_COMMAND_LENGTH + 1) * sizeof(char), "python2.7 %s '%s'",
SCRIPT_FILE, stad) < = 0) {
Return 0;
}
/ * Kör python skript och skriva allt i ett rör
* så vi kan läsa resultatet * /
FP = popen (buf, "r");
om (fp == NULL) return 0;
Läs aktuella väder värden
int erg = fscanf (fp, "% f\n%f\n%f", och (w -> temp), & (w -> clouds), & (w -> regn)) == 3.
Nära röret och kontrollera returvärdet
om (pclose(fp)! = 0) {
Return 0;
}
returnera erg;
}
/*
* Standard installationsmetoden för Arduino
*/
void setup() {
int i;
Pullup motstånd -> negerade logik
pinMode (BUTTON_PIN, INPUT_PULLUP);
Ange baudvärde för felsökning
Serial.BEGIN(9600);
Initiera våra 3 RGB-lysdioder
init_rgb_led(temp);
init_rgb_led(Rain);
init_rgb_led(Clouds);
Testa våra led genom att visa en animering
för (jag = 0; jag < = 100; i ++) {
set_temp(i / 4);
Delay(10);
}
för (jag = 0; jag < = 100; i ++) {
set_rain(i);
Delay(10);
}
för (jag = 0; jag < = 100; i ++) {
set_clouds(i);
Delay(10);
}
}
/*
* Uppdateringar väderinformation.
* onlyLeds gör vad det låter som ;)
*/
void updateEverything (bool onlyLeds) {
struct Väder Väder;
Fil * fd;
char staden [MAX_CITY_LENGTH + 1];
char mailaddr [MAX_MAILADDR_LENGTH + 1];
char meddelande [MAX_MESSAGE_LENGTH + 1];
int min_tmp, max_tmp, min_rain, max_rain, min_clouds, max_clouds;
Öppna konfigurationsfilen
fd = fopen (CONFIG_FILE, "r");
Felhantering
om (fd == NULL) {
Serial.println ("kunde inte hitta/öppna konfigurationsfilen! \n");
Sleep(SLEEP_TIME);
hemkomst.
}
Först läsa standart LED stadsnamnet
om (fscanf (fd, "%s\n", stad) == 1) {
Utskriftsnamn för felsökning
Serial.println(City);
om (readWeather (stad, och väder)) {
Skriva ut värden för felsökning
Serial.println(Weather.Temp);
Serial.println(Weather.Clouds);
Serial.println(Weather.Rain);
Uppdatera LED-färger
set_temp(Weather.Temp);
set_clouds(Weather.Clouds);
set_rain(Weather.Rain);
} annat {
Serial.println ("fel vid läsning av vädret! \n");
}
} annat {
Serial.println ("Konnte Stadt nicht lesen! \n");
}
Läsa konfigurationsfilen, tills det slutar
medan (! feof(fd) & &! onlyLeds) {
Försök att läsa en rad och tolka det
om (fscanf (fd, "% [^;]; %d %d %d; %d; %d; %d; % [^;]; %[^;];\ n", stad, & min_tmp, och max_tmp,
& min_clouds & max_clouds, & min_rain & max_rain, meddelande, mailaddr) == 9) {
Skriva ut staden för felsökning
Serial.println(City);
om (readWeather (stad, och väder)) {
Skriva ut värden för felsökning
Serial.println(Weather.Temp);
Serial.println(Weather.Clouds);
Serial.println(Weather.Rain);
Kolla våra villkor för att ge ett meddelande
om (min_tmp < = weather.temp & & weather.temp < = max_tmp & &
min_clouds < = weather.clouds & & weather.clouds < = max_clouds & &
min_rain < = weather.rain & & weather.rain < = max_rain) {
Skriva ut meddelandet
Serial.println(Message);
Skicka ett mail
om (! send_weather_mail (meddelande, väder, mailaddr)) {
Serial.println ("fel vid sändning av meddelande! \n");
}
}
} annat {
Serial.println ("fel vid läsning av vädret! \n");
}
} annat {
Serial.println ("fel vid läsning config filen!");
}
}
Stäng filen och vänta tills du trycker på knappen
fclose(fd);
}
void loop() {
statisk int loop_count = 1000 * SLEEP_TIME; Så är det executet början
om (loop_count > = 1000 * SLEEP_TIME) {
updateEverything(0);
loop_count = 0;
}
om (digitalRead(BUTTON_PIN) == låg) {
Switch ledde är off
set_rgb_led (temp, 0, 0, 0);
set_rgb_led (moln, 0, 0, 0);
set_rgb_led (regn, 0, 0, 0);
updateEverything(1);
}
loop_count += LOOP_DELAY;
Delay(LOOP_DELAY);
}

Se Steg
Relaterade Ämnen

Intellekten Galileo Gen 2 ljussensor med utsäde Studio startpaket

Här ska jag visa dig hur man skapar en enkel Intel Galileoprojektet Gen2 med en ljussensor och en LCD-display.I grund och botten när det finns ljus displayen är tänkt att Visa "Det är Light" och "Göra saker". Den "Göra saker"...

Intellekten Galileo interaktiva ledde matrisen

Skapa en interaktiv 8 x 8 ledde matrisen och skicka bilder som ska visas från var som helst i världen!I detta projekt använder en Intel Galileos styrelse som Intel har generöst försett oss med (de ger mycket de till unis världen över). Intel-Galileo...

Intellekten Galileo projekterar: Enkel DIY väderstation

Hej världen! Jag är en tinkere och maker alla sätt Kenya. Jag älskar att göra elektroniska DIY projekt och jag är en ivrig beundrare av utveckling styrelser, särskilt Intel Galileo, så se till att de flesta projekt kommer jag att dela med dig kommer...

Intellekten Galileo kontrollerade cnc plotter

Detta är bara en kort intro om hur jag gick om att bygga CNC plotter. Merparten av detta byggs med gamla skrivare och scanner delar eller delar som lätt kan hittas i en järnaffär. Om jag lämnade något ut bara lämna en kommentar. Jag byggde detta för...

Intellekten Edison väderstation webserver (liten)

Jag bestämde mig att prova ett projekt med Intel Edison, använda den som en webbserver, för min hem väderstation. Davis instrument Vantage VUE erbjuder väderdata via en USB-port – så låt oss försöka ansluta det till Edison!Jag valde den minsta Edison...

Ansluta en väderstation till Internet saker

Hej och Välkommen med till de stegvisa instruktionerna för att göra din Davies väderstation del av Sakernas Internet våra Intel ICRI kit.Med hjälp av detta kit kommer du att kunna ansluta din Davies väderstation till en Intel Galileo, vilket innebär...

Intellekten Edison levande temperatur uppvisning

Hej där alla!Det har varit en lång tid sedan jag skrivit något här, och jag trodde den nya Intel IoT versionen skulle vara en bra idé att skapa en instructable.Så - vad är Sakernas Internet?Sakernas Internet står för "Sakernas Internet" som är e...

Visa temperatur via Intel Galileo

Detta program använder temperaturgivare och LCD-RGB Visa från Grove Starter Kit (Intel IoT Edition) att få och Visa strömrumstemperaturen. Jag använde Galileo Gen 2 styrelsen och Arduino IDE för att komma med programmet med bara några rader kod. Gans...

DIY fukt Sensor med Intel Galileo

Nyligen jag spelar med en fukt sensor för ett av mina projekt så jag tänkte dela den med dig. Jag fick den från eBay för mindre än $4. I princip A markens fukt sensor mäter halten i jord. Med det, kan du enkelt berätta när jorden behöver mer vatten e...

Mark fukt Sensor - Intel Galileo

Detta är bara en enkel tutorial att vägleda hårdvara entusiaster på hur du ställer in en jord fukt sensor använder Intel Galileo. Följ bara stegen nedan för att komma igångSteg 1: Kort beskrivningI huvudsak en markfuktighet sensor mäter halten i jord...

Handledning om hur man gör en rökdetektion system med Intel Galileo Gen2.

I detta projekt, kommer att vi gå över hur man bygger en rök sensorkrets med en Intel Galileo Gen2 ombord bland lite fler enheter.Vi kommer använda MQ2 rök sensorn i detta fall eftersom det är förnuftigt att både rök och brandfarlig gas.MQ2 röken fun...

Med IPC för trådlös kryptering med Intel Galileo

IntroduktionSyftet med detta Instructable är att illustrera hur man ställer in och använder IPC (interprocess kommunikation) mellan ett Python-skript och verkställande skissen ombord Intel Galileo. Förutom att tillhandahålla källkoden kommer jag gå ö...

IAquaDesk - IoT aktiverat kretsloppsodling använder Intel galileo (Intel IoT)

Kretsloppsodling är ett system av vattenbruk där avfallet produceras av odlad fisk eller andra vattenlevande varelser levererar näringsämnen för växter som odlas hydroponically, som i sin tur renar vattnet. Ett ekosystem där växter och fiskar hjälpa...

Grove startpaket med Intel Galileo Gen 2: Komma igång

När jag började med IoT var jag alla förvirrade om elektronik materialen,motstånd och kretsar, då jag fick Seeed Studio's Grove Starter Kit plus. Med detta har vi att bara koppla in modulerna som sensor istället för att hantera det genom lödning elle...

Fukt-Sensor med Intel Galileo

Nyligen var jag spelar med fukt sensor för en av mitt projekt så tänkte dela den med dig.Steg 1: Fukt SensorJag fick jord fukt Sensor från ebay för mindre än $4. I princip A markens fukt sensor mäter halten i jord. Med det, kan du enkelt berätta när...

Komma igång med Intel® Galileo Gen2 utveckling styrelsen

Denna handbok förklarar om hur du kommer igång med Intel® Galileo Gen2 styrelsen.Intel® Galileo Gen 2 utveckling ombord är en mikrokontroller styrelsen baserat på Intel® Quark™ SoC X 1000 ansökan processor, en 32-bitars Intel® Pentium® varumärke syst...

Komma igång med Intel Galileo

Nyligen fick jag Intel Galileo från Microsoft som jag är en av finalistIoT konkurrens. Nu spendera jag min tid att göra en massa kreativa tyger med min Galileo. Jag skriver detta instructable för alla som ville komma igång med Intel Galileo.Steg 1: I...

Lätta efterföljare robot använder Intel Galileo

Komponenter:Intellekten GalileoLDRPotentiometerskärbrädaOperationsförstärkareDarlington transistorDC-motorresistorSteg 1: arbetarProjektet är för att kontrollera en robot som använder Intel Galileo som tar en signal från en ljus beroende resistor (ld...

Galileo Carduino

Målet med detta projekt är att skapa en plattform för människor som vill experimentera med automatiska program för nya Intel Galileo styrelsen. Galileo är ett kraftfullt mikro-controller som kan programmeras med hjälp av Arduino IDE, men det också kö...