//test
#define THRESHOLD 2045
#define MQ2_ANA 0
#define MQ2_DIG 2
#define DHTPIN 13
#define DHTTYPE DHT11
#include <Stepper.h>
#include "DHTesp.h"
#include <PubSubClient.h>
#include <WiFi.h>
#include <DHT.h>
DHTesp dhtSensor;
// initial WIFI
const char* ssid = "Wokwi-GUEST";
const char* password = "";
WiFiClient espClient;
// initial MQTT client
const char* mqttServer = "mqtt.netpie.io";
const int mqttPort = 1883;
const char* clientID = "1a29f63e-65e1-4eec-9453-d4843059438c";
const char* mqttUser = "Vc4Bso1ZUXY2twvT9Dj41Gkh7Z9R1NDo";
const char* mqttPassword = "5xbcBUzDEMMXhxNX6ZgKhfZxg7cLpZz6";
const char* topic_pub = "@msg/lab_nodered_ict_kps/weather/data";
const char* topic_sub = "@msg/lab_nodered_ict_kps/command";
// int led_pin = 25;// mog up the fan
int red =32;//ไฟแดง
int orange =33;
int blue =25;
//netpie connect
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnectNETPIE() {
// Loop until we're reconnected
char mqttinfo[80];
snprintf (mqttinfo, 75, "Attempting MQTT connection at %s:%d (%s/%s)...", mqttServer, mqttPort, mqttUser,
mqttPassword);
while (!client.connected()) {
Serial.println(mqttinfo);
String clientId = clientID;
if (client.connect(clientId.c_str(), mqttUser, mqttPassword)) {
Serial.println("...Connected");
client.subscribe(topic_sub);
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void messageReceivedCallback(char* topic, byte* payload, unsigned int length) {
char payloadMsg[80];
Serial.print("Message arrived in topic: ");
Serial.println(topic);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
payloadMsg[i] = (char) payload[i];
}
payloadMsg[length] = '\0'; // put end of string to buffer
Serial.println();
Serial.println("-----------------------");
processMessage(payloadMsg);
}
void processMessage(String recvCommand) {
}
void setColor(int R, int G, int B) {
analogWrite(RED_PIN, R);
analogWrite(GREEN_PIN, G);
analogWrite(BLUE_PIN, B);
}
const int mortor = 200; //รอบมอเตอร์
Stepper myStepper(mortor, 16, 17, 18, 19);//pin mortor
void setup() {
setup_wifi();
client.setServer(mqttServer, mqttPort);
client.setCallback(messageReceivedCallback);
myStepper.setSpeed(60);
pinMode(MQ2_ANA, INPUT);//input analog ฝุ่น
pinMode(MQ2_DIG, INPUT);//input digital ฝุ่น
pinMode(red, OUTPUT);//output red
pinMode(orange, OUTPUT);//output orange
pinMode(blue, OUTPUT);//output blue
dhtSensor.setup(DHTPIN, DHTesp::DHT22);
Serial.begin(9600);
}
void loop() {
if (!client.connected()) {
reconnectNETPIE();
} client.loop();
TempAndHumidity data = dhtSensor.getTempAndHumidity();
float t = dhtSensor.getTemperature();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
if(t >= 37 )
{
myStepper.step(mortor);
}
else if(analogRead(MQ2_ANA) >= 3107){
digitalWrite(red, HIGH);
digitalWrite(orange, LOW);
digitalWrite(blue, LOW);
}
else if(analogRead(MQ2_ANA) >= 2048){
digitalWrite(red, LOW);
digitalWrite(orange, HIGH);
digitalWrite(blue, LOW);
}else if(analogRead(MQ2_ANA) < 2048){
digitalWrite(red, LOW);
digitalWrite(orange, LOW);
digitalWrite(blue, HIGH);
}
else{
digitalWrite(red, LOW);
digitalWrite(orange, LOW);
digitalWrite(blue, LOW);
}
Serial.print("Analog: ");
Serial.println(analogRead(MQ2_ANA));
Serial.print("Digital: ");
Serial.println(digitalRead(MQ2_DIG));
delay(1000); // this speeds up the simulation
}