main.cpp
#include <Arduino.h>
#include <WiFi.h>
#include <MQTT.h>              // 256dpi MQTT library
#include <ArduinoJson.h>
#include <Adafruit_NeoPixel.h>
 
//////////////// EDIT THESE ////////////////
const char* WIFI_SSID     = "YOUR_SSID";
const char* WIFI_PASSWORD = "YOUR_PASSWORD";
const char* MQTT_HOST     = "test.mosquitto.org";   // or your lab broker
const uint16_t MQTT_PORT  = 1883;
const char* BASE_TOPIC    = "iot/studentname";        // change per student
////////////////////////////////////////////
 
#define NEOPIXEL_PIN 3
Adafruit_NeoPixel pixel(1, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800);
 
WiFiClient net;
MQTTClient mqtt(1024);         // 1KB message buffer
 
// ---------- Wi-Fi ----------
void ensureWiFi() {
  if (WiFi.status() == WL_CONNECTED) return;
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("WiFi connecting");
  while (WiFi.status() != WL_CONNECTED) {
    delay(400);
    Serial.print(".");
  }
  Serial.printf("\nIP: %s\n", WiFi.localIP().toString().c_str());
}
 
// ---------- MQTT message handler (256dpi signature) ----------
void onMessage(String &topic, String &payload) {
  Serial.printf("MQTT msg on %s: %s\n", topic.c_str(), payload.c_str());
 
  // Create a dynamic document on the stack with a defined capacity
  JsonDocument doc;  
  DeserializationError err = deserializeJson(doc, payload);
  if (err) {
    Serial.printf("JSON parse error: %s\n", err.c_str());
    return;
  }
 
  int r = doc["r"] | 0;
  int g = doc["g"] | 0;
  int b = doc["b"] | 0;
  int brightness = doc["brightness"] | 50;
 
  pixel.setPixelColor(0, pixel.Color(r, g, b));
  pixel.setBrightness(brightness);
  pixel.show();
 
  // Acknowledge
  String ackTopic = String(BASE_TOPIC) + "/led/ack";
  JsonDocument ack;  // also replace StaticJsonDocument here
  ack["ok"] = true;
  ack["r"] = r;
  ack["g"] = g;
  ack["b"] = b;
  ack["brightness"] = brightness;
 
  char buf[96];
  size_t n = serializeJson(ack, buf, sizeof(buf));
  mqtt.publish(ackTopic, String(buf, n));
}
 
 
// ---------- MQTT connect / subscribe ----------
void ensureMQTT() {
  if (mqtt.connected()) return;
 
  String clientId = "sparrow-c6-led-" + String((uint32_t)ESP.getEfuseMac(), HEX);
 
  Serial.println("MQTT connecting...");
  while (!mqtt.connect(clientId.c_str())) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("\nMQTT connected");
 
  String sub = String(BASE_TOPIC) + "/led";
  mqtt.subscribe(sub);
  Serial.printf("Subscribed: %s\n", sub.c_str());
}
 
void setup() {
  Serial.begin(115200);
  delay(200);
 
  pixel.begin();
  pixel.clear();
  pixel.show();
 
  // Broker + transport setup and callback
  mqtt.begin(MQTT_HOST, MQTT_PORT, net);
  mqtt.onMessage(onMessage);
}
 
void loop() {
  ensureWiFi();
  ensureMQTT();
 
  // Process incoming packets and keepalive
  mqtt.loop();
  delay(10);
}
iothings/laboratoare/2025_code/lab3_2.txt · Last modified: 2025/10/11 13:18 by dan.tudose
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0