#include <WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <BH1750.h>
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
const char* mqtt_server = "your_MQTT_SERVER";
const int mqtt_port = 1883;
const char* mqtt_username = "your_MQTT_USERNAME";
const char* mqtt_password = "your_MQTT_PASSWORD";
const char* mqtt_topic_light = "your_MQTT_TOPIC_LIGHT";
const char* mqtt_topic_integral = "your_MQTT_TOPIC_INTEGRAL";
WiFiClient espClient;
PubSubClient client(espClient);
BH1750 lightMeter(0x23);
unsigned long last_light_sent = 0;
unsigned long last_integral_sent = 0;
unsigned long last_reading_time = 0;
unsigned long integral_value = 0;
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println("Starting...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi...");
}
Serial.println("WiFi connected");
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
Wire.begin();
lightMeter.begin(BH1750::CONTINUOUS_HIGH_RES_MODE);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
unsigned long now = millis();
if (now - last_reading_time >= 60000) {
float light_value = lightMeter.readLightLevel();
Serial.print("Light: ");
Serial.print(light_value);
Serial.println(" lx");
client.publish(mqtt_topic_light, String(light_value).c_str());
last_reading_time = now;
}
if (now - last_integral_sent >= 1800000) {
Serial.print("Integral value: ");
Serial.print(integral_value);
Serial.println(" lx*min");
client.publish(mqtt_topic_integral, String(integral_value).c_str());
integral_value = 0;
last_integral_sent = now;
}
if (now - last_light_sent >= 30000) {
float light_value = lightMeter.readLightLevel();
unsigned long elapsed_time = (now - last_light_sent) / 1000;
unsigned long light_integral = (unsigned long) (light_value * elapsed_time / 60);
integral_value += light_integral;
last_light_sent = now;
}
}
void reconnect() {
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
if (client.connect("arduino", mqtt_username, mqtt_password)) {
Serial.println("MQTT connected");
} else {
Serial.print("Failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
發佈留言
很抱歉,必須登入網站才能發佈留言。