Scopul proiectului este de a realiza o lampa interactiva care ar reactiona la comenzi de la un server la care aceasta ar putea sa se conecteze prin intermediul unui modul Wi-Fi.
Motivatia principala este posibilitea de a extinde functionalitatea lampii prin intermediul serverului.
Utilitatea principala a lampii este de a notifica in prealabil despre posibila ploiae fara a fi nevoie de a verifica vremea pe telefon sau pe internet. Solutia fiind mai eficienta deoarece este un dispozitiv necesar la birou si este foarte usor de observat datorita culorilor.
Proiectul este compus din 2 parti principale: partea de hardware si partea de software.
Partea de software este reprezentata de un server care va fi responsabil de preluarea datelor de la un server meteo si de a publica mesaje pe un broker MQTT. Aceste mesaje vor fi preluate de catre partea de hardware care va fi responsabila de a controla lampa.
Lampa se va conecta la brokerul MQTT si va astepta mesaje de la server. In functie de mesajul primit lampa va schimba culoarea LED-urilor.
De asemenea as vrea sa implementez si afisarea mesajelor pe un display LCD.
Lista piese:
Mediu de dezvoltare: Arduino IDE + VSCode Librarii: ESP8266WiFi, PubSubClient, FastLED, LiquidCrystal_I2C, Wire
Structuri folosit:
// enum pentru modurile de efecte enum EffectMode { GREEN_STATIC, RED_STATIC, BLUE_STATIC, RAINBOW }; // structura pentru efectul de picaturi de ploaie struct Raindrop { int position; int intensity; }; // coada de mesaje String messageQueue[MAX_QUEUE_SIZE]; void enqueueMessage(String message) { ... } String dequeueMessage() { ... }
Metode folosite:
// implementarea efectelor void normalModeEffects() { FastLED.clear(); if (currentEffectMode == GREEN_STATIC) { fill_solid(leds, NUM_LEDS, CRGB(0, 255, 0)); // Green } if (currentEffectMode == RED_STATIC) { fill_solid(leds, NUM_LEDS, CRGB(255, 0, 0)); // Red } if (currentEffectMode == BLUE_STATIC) { fill_solid(leds, NUM_LEDS, CRGB(0, 0, 255)); // Blue } if (currentEffectMode == RAINBOW) { static uint8_t hue = 0; fill_rainbow(leds, NUM_LEDS, hue, 255 / NUM_LEDS); hue+=3; } FastLED.show(); } // bucla principala void loop() { displayNextMessage(); if (isRaining()) { rainEffect(); } else { normalModeEffects(); } if (!client.connected()) { reconnect(); } client.loop(); }
Codul sursa: code.txt
Script pentru trimitere mesaje:
#!/bin/bash mosquitto_pub -h 91.121.93.94 -p 1883 -t "weather-project/data" -m "r"
* Proiect similar: https://alexgyver.ru/gyverlamp/