Intel Galileo-weerstation (4 / 5 stap)

Stap 4: Uploaden en configureren van de code

  1. De weather_to_led.ino in de Arduino IDE openen en configureren na dingen

  • LED poorten (The PWM-poorten van uw Raad van Bestuur zijn gemarkeerd met een [ ~ ])
  • Knop Poort
  • Tijd van de slaap
  • Misschien script en config bestandspad wijzigen
  • Open mail.py via ssh. Wijzig de 6 variabelen gedefinieerd op de top van het script
    • SMTPServerUrl is het adres van uw virtuele SMTP-server
    • SMTPServerPort is het poortnummer van de SMTP-server
    • SMTPUsername is de gebruikersnaam van uw e-mailaccount
    • SMTPPassword is het wachtwoord voor uw e-mailaccount
    • E-mailadres is het e-mailadres aan uw e-mailaccount
    • Onderwerp is het onderwerp van de e-mail die is verzonden door dit script
    • Opmerking: De verbinding is niet beveiligde. Informatie zijn niet gecodeerd
  • Open config.txt via ssh. De regeling van de config wordt uitgelegd in het volgende codeblok:
  •  CITY_NAME_LED CITY_NAME1;MIN_TEMP;MAX_TEMP;MIN_CLOUDS;MAX_CLOUDS;MIN_RAIN;MAX_RAIN;MESSAGE;E-MAIL; CITY_NAME2;... [...] [EMPTY LINE] 
    • CITY_NAME_LED is de naam van de stad waarvan weergegevens via LEDs moeten worden weergegeven.
    • Elke volgende regel definieert een bericht dat moet worden verzonden naar de E-Mail als de opgegeven voorwaarden wordt voldaan * volgens de weergegevens opgehaald van de stad die is gedefinieerd op de lijnen die beginnen. (CITY_NAME1 in het codeblok)
    • Temperaturen worden gemeten in Celsius, wolken in procenten (0% = blauwe hemel) en regen wordt gemeten in mm per vierkante meter, gedaald in de afgelopen 3 uren.

    * Dit betekent dat voor elke gemeten waarde x moet MIN_VALUE < = x en 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";/* * Contains the IO port numbers for one RGB-LED. We use ports with * PWM to mix the colours. * Port 0 means, this LED is not used or connected. */ struct RGB_LED { int red; int green; int blue; };/* * Declaration of our 3 used led's. Each uses only two ports. So we * are able to connect three led's to 6 PWM ports. */ struct RGB_LED temp = {3, 0, 5}; struct RGB_LED rain = {0, 6, 9}; struct RGB_LED clouds = {0, 10, 11};struct weather { float temp; float clouds; float rain; };/* * Enables one led. Therefor the pinmode ist set to * output. * led struct with port numbers */ void init_rgb_led(struct RGB_LED led) { // Set each led Port to output if (led.red != 0) pinMode(led.red, OUTPUT); if (led.green != 0) pinMode(led.green, OUTPUT); if (led.blue != 0) pinMode(led.blue, OUTPUT); // Switch led's off set_rgb_led(led, 0, 0, 0); }/* * Sets the color on a specific led. We use analogWrite and PWM to * mix the colors. * The led struct should have been initialized before. * led struct with port numbers and r,g,b values, which should be * set */ void set_rgb_led(struct RGB_LED led, int r, int g, int b) { // Writes the given values on our ports. The value must be inverted, // caused by our construction. if (led.red != 0) analogWrite(led.red, 255 - r); if (led.green != 0) analogWrite(led.green, 255 - g); if (led.blue != 0) analogWrite(led.blue, 255 - b); }/* * Given a temperature in celsius this function shows the value * by mixing the right colors together. * degree from 0 to 25 */ void set_temp(int degree) { int value; // Scale: 0 <= degree <= 25 if (degree > 25) degree = 25; if (degree < 0) degree = 0; // Calculate the LED value. (25 * 1 value = degree * 10; // Red led was to bright. So its value is divided by 2 set_rgb_led(temp, value / 2, 0, 255 - value); }/* * Given a propability this function * shows the value by mixing the right colors together. * propability as value from 0 to 100 */ void set_rain(int percent) { int value; // Accept only values between 0 and 100 degree if (percent > 100) percent = 100; if (percent < 0) percent = 0; value = (percent * 255) / 100; set_rgb_led(rain, 0, 255 - value, value); }/* * Given a propability this function * shows the value by mixing the right colors together. * propability as value from 0 to 100 */ void set_clouds(int percent) { int value; if (percent > 100) percent = 100; if (percent < 0) percent = 0; value = (percent * 255) / 100; set_rgb_led(clouds, value, value, 255 - value); // Rot durch Verdratung }/* * This function uses a python script to send a message to a given mail address * including the current weather informations. * * message is a pointer to our message string * w is a weather struct containing the current informations * mailaddr is a pointer to our target mail string */ char send_weather_mail(char *message, struct weather w, char* mailaddr) { FILE *fp; char buf[1024]; // Prepare a big string, which contains the command if (snprintf(buf, 1024, "python2.7 %s '%s' 'New weather informations:\n%s\n\nCurrent Weather:\nTemperature: %.1fC\nRaining: %dmm (last 3h)\nClouds: %d%%'", MAIL_FILE, mailaddr, message, w.temp, w.rain, w.clouds) <= 0) { return 0; } // Open a pipe and execute the command fp = popen(buf, "r"); if (fp == NULL) { return 0; } // Next close it if (pclose(fp) != 0) { return 0; } return 1; }/* * Given a city and a weather struct, this method reads * the current weather values and fills the struct with these. * Name of a city as string * Pointer to a weather struct * * 0 on failure and otherwise it is a success */ int readWeather(char *city, struct weather *w) { FILE *fp; char buf[MAX_COMMAND_LENGTH + 1]; // Build the command string, by adding path and city together if (snprintf(buf, (MAX_COMMAND_LENGTH + 1) * sizeof(char), "python2.7 %s '%s'", SCRIPT_FILE, city) <= 0) { return 0; } /* Execute the python script and write everything into a pipe * so we can read the result */ fp = popen(buf, "r"); if (fp == NULL) return 0; // Read the current weather values int erg = fscanf(fp, "%f\n%f\n%f", &(w->temp), &(w->clouds), &(w->rain)) == 3; // Close the pipe and check return value if (pclose(fp) != 0) { return 0; } return erg; }/* * Standard Arduino setup method */ void setup() { int i; //Pullup resistors -> negated Logic pinMode(BUTTON_PIN, INPUT_PULLUP); // Set baudrate for debugging Serial.begin(9600); // Initialize our 3 RGB-LEDs init_rgb_led(temp); init_rgb_led(rain); init_rgb_led(clouds); // Test our leds by showing an animation for (i = 0; i <= 100; i++) { set_temp(i / 4); delay(10); } for (i = 0; i <= 100; i++) { set_rain(i); delay(10); } for (i = 0; i <= 100; i++) { set_clouds(i); delay(10); } }/* * Updates the weather infomation. * onlyLeds does what it sounds like ;) */ void updateEverything(bool onlyLeds) { struct weather weather; FILE *fd; char city[MAX_CITY_LENGTH + 1]; char mailaddr[MAX_MAILADDR_LENGTH + 1]; char message[MAX_MESSAGE_LENGTH + 1]; int min_tmp, max_tmp, min_rain, max_rain, min_clouds, max_clouds; // Open the config file fd = fopen(CONFIG_FILE, "r"); // Error handling if (fd == NULL) { Serial.println("Could not find/open config file!\n"); sleep(SLEEP_TIME); return; } // First read the standart LED city name if (fscanf(fd, "%s\n", city) == 1) { // Print name for debugging Serial.println(city); if (readWeather(city, &weather)) { // Print values for debugging Serial.println(weather.temp); Serial.println(weather.clouds); Serial.println(weather.rain); // Refresh LED colors set_temp(weather.temp); set_clouds(weather.clouds); set_rain(weather.rain); } else { Serial.println("Error reading weather!\n"); } } else { Serial.println("Konnte Stadt nicht lesen!\n"); } // Read config file, until it ends while (!feof(fd) && !onlyLeds) { // Try to read one line and parse it if (fscanf(fd, "%[^;];%d;%d;%d;%d;%d;%d;%[^;];%[^;];\n", city, &min_tmp, &max_tmp, &min_clouds, &max_clouds, &min_rain, &max_rain, message, mailaddr) == 9) { // Print city for debugging Serial.println(city); if (readWeather(city, &weather)) { // Print values for debugging Serial.println(weather.temp); Serial.println(weather.clouds); Serial.println(weather.rain); // Check our conditions for giving a message if (min_tmp <= weather.temp && weather.temp <= max_tmp && min_clouds <= weather.clouds && weather.clouds <= max_clouds && min_rain <= weather.rain && weather.rain <= max_rain) { // Print the message Serial.println(message); // Send a mail if (!send_weather_mail(message, weather, mailaddr)) { Serial.println("Error sending message!\n"); } } } else { Serial.println("Error reading weather!\n"); } } else { Serial.println("Error reading config file!"); } } // Close the file and wait for button press fclose(fd); }void loop() { static int loop_count = 1000 * SLEEP_TIME; // So it is executet at beginning if (loop_count >= 1000 * SLEEP_TIME) { updateEverything(0); loop_count = 0; } if (digitalRead(BUTTON_PIN) == LOW) { // Switch led's off set_rgb_led(temp, 0, 0, 0); set_rgb_led(clouds, 0, 0, 0); set_rgb_led(rain, 0, 0, 0); updateEverything(1); } loop_count += LOOP_DELAY; delay(LOOP_DELAY); } 

    Gerelateerde Artikelen

    Intel Galileo projecten: Eenvoudige DIY weerstation

    Intel Galileo projecten: Eenvoudige DIY weerstation

    Hallo mensen! Ik ben een tinkere en de maker alle de manier Kenia. Ik hou van het doen van elektronische DIY projecten en ik ben een fervent fan van ontwikkelborden, met name het Intel Galileo, dus zorg ervoor dat het merendeel van de projecten zal i
    Intel Galileo beheerst cnc plotter

    Intel Galileo beheerst cnc plotter

    Dit is slechts een korte intro over hoe ik ging over het bouwen van CNC plotter. de meeste van deze is gebouwd met behulp van oude printer en scanner onderdelen of onderdelen die gemakkelijk kunnen worden gevonden bij een ijzerhandel. Als ik links ie
    Interfacing LCD met Intel Galileo

    Interfacing LCD met Intel Galileo

    TITEL: INTERFACING LCD-SCHERM MET INTELGALILEOINLEIDING:Dit project beoogt een LCD met een Intel Galileo interfacing. Het LCD-scherm weergegeven een welkom-instructie. Dit wordt vergemakkelijkt door code programma dat is geüpload naar de Intel Galile
    Tutorial over hoe je een rook detectiesysteem met behulp van Intel Galileo Gen2 te maken.

    Tutorial over hoe je een rook detectiesysteem met behulp van Intel Galileo Gen2 te maken.

    In dit project gaan we over hoe het bouwen van een rook sensorcircuit met een Intel Galileo Gen2 board onder een beetje meer apparaten.Wij zullen de MQ2 rook sensor in dit geval gebruiken want het is verstandig om zowel rook als licht ontvlambaar gas
    Controle robotarm met handschoenen, Android telefoon en Intel Galileo (Updated)

    Controle robotarm met handschoenen, Android telefoon en Intel Galileo (Updated)

    Eigenlijk, dit project op basis van een ander project heb ik bouwen voordat. Toch, in plaats van het opbouwen van de robotarm en met behulp van Arduino, gebruikte ik mijn vriend 6DOF robotarm en Intel Galileo.Stap 1: onderdelen 1-Intel Galileo Gen 22
    Grond vochtigheid Sensor - Intel Galileo

    Grond vochtigheid Sensor - Intel Galileo

    Dit is gewoon een eenvoudige tutorial om te begeleiden hardware liefhebbers over het instellen van een grond vochtigheid sensor met behulp van Intel Galileo. Volg de stappen hieronder om te beginnenStap 1: Korte beschrijvingIn wezen een bodemvocht se
    LINUX YOCTO op INTEL GALILEO / EDISON

    LINUX YOCTO op INTEL GALILEO / EDISON

    Yocto is besturingssysteem dat gebruik ini intel galileon worden kan of intel edison. in linux yocto, kunt u uw code schrijven door gebruik knooppunt js, python, enz er zijn enkele redenen voor gebruik linux yocto op uw intel galileo of intel edison,
    Intel Galileo Garage Monitor

    Intel Galileo Garage Monitor

    De intel Galileo is een geweldig platform om IoT-apparaten. Dit is een voorbeeld van het gebruik van Python en een paar sensoren een garage monitor/alarm systeem te creëren.Stap 1: onderdelenU moet de volgende onderdelen:-Intel Galileo-Intel Galileo
    Linux Tutorial voor Intel® Galileo Gen 2

    Linux Tutorial voor Intel® Galileo Gen 2

    Een ten onrechte zou kunnen denken dat de Intel® Galileo Gen 2 als alleen een geavanceerde, krachtigere versie van de Arduino Uno dat gebeurt op een Linuxsysteem worden gestapeld.Er is eigenlijk meer dan dat en hopelijk, deze tutorial zal de weergeve
    Vervagen van een LED met een potentiometer op Intel Galileo en Visual Programming

    Vervagen van een LED met een potentiometer op Intel Galileo en Visual Programming

    Deze tutorial toont je hoe te vervagen een LED met behulp van een potentiometer op Intel Galileo met behulp van de ontwikkelingsuitrusting van de Intel-IoT en Wyliodrin. U moet:* Intel Galileo bord, rev 1 of 2* een Grove schild* een Grove LED* een Gr
    Vocht Sensor met Intel Galileo

    Vocht Sensor met Intel Galileo

    Onlangs speelde ik met vocht sensor voor een van mijn project zo denken om te delen met je.Stap 1: Vocht SensorIk kreeg grond vochtigheid Sensor van ebay voor minder dan $4. In principe A bodem vocht sensor meet het vochtgehalte in de bodem. Met het,
    IAquaDesk - IoT ingeschakeld Aquaponics met behulp van Intel galileo (Intel IoT)

    IAquaDesk - IoT ingeschakeld Aquaponics met behulp van Intel galileo (Intel IoT)

    Aquaponics is een systeem van de aquacultuur waarin de afvalstoffen geproduceerd door gekweekte vissen of andere aquatische wezens levert de voedingsstoffen voor planten gekweekt hydrocultuur, die op zijn beurt het water te zuiveren. Een ecosysteem w
    Foot - een slimme metgezel voor het fysiek uitgedaagd met behulp van Intel Galileo Super

    Foot - een slimme metgezel voor het fysiek uitgedaagd met behulp van Intel Galileo Super

    Inductie van dit idee:We voelden echt erg jammer voor een collega in ons kantoor, waarvan benen zeer slecht zijn uitgeschakeld en ze worstelt alot dagelijks met krukken lopen. Hoewel er lift voorzien is, is het moeilijker voor haar om te bereiken dat
    Aan de slag met de Intel® Galileo Gen2 Development board

    Aan de slag met de Intel® Galileo Gen2 Development board

    Deze tutorial legt uit over hoe aan de slag met de Intel® Galileo Gen2-bestuur.De Intel® Galileo Gen 2 ontwikkel bord is een microcontroller board gebaseerd op de Intel® Quark™ SoC X 1000 toepassing processor, een 32-bits Intel® Pentium® merk systeem