2017年10月30日 星期一
DHT11 MQTT publisher & Subscriber + Blynk (2 WIFI ssid password)
/* Publisher Humidity , Temperature , Humidity & Temperature 3 item data
* Subscribe 3 data by Arduino program Subscribe & Blynk APP
*
* Use NodeMCU to drive DHT11 and send temperature/humidity value to MQTT server
* CopyRight www.osoyoo.com
* Software:
* Arduino IDE(version 1.6.4+)
* ESP8266 Board Package and the Serial Port Driver
* MQTT Clirnt (MQTTBox here)
* Arduino library: PubSubClient
* Arduino library:DHT
* Connection
* NodeMCU DHT11 sensor
* 3.3v VCC
* D3 DATA
* GND Ground
* *
*/
//=====Blynk=================================
#define BLYNK_PRINT Serial
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h> //including the library of SimpleTimer
//=====Blynk=================================
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <dht.h>
dht DHT;
// Define NodeMCU D3 pin to as temperature data pin of DHT11
#define DHT11_PIN D3
//========================LED====================
#define LED D0 // Led in NodeMCU at pin GPIO16 (D0).
#define BRIGHT 350*2 //max led intensity (1-500)
#define INHALE 1250*2 //Inhalation time in milliseconds.
#define PULSE INHALE*1000/BRIGHT
#define REST 1000 //Rest Between Inhalations.
//========================LED====================
// Update these with values suitable for your network.
//const char* ssid = "******";//put your own wifi ssid here
//const char* password = "******";// put your wifi password here
const char* ssid = "My ASUS";//put your wifi ssid here
const char* password = "alex9981" ;//put your wifi password here
const char* ssid2 = "74170287";//put your wifi ssid here
const char* password2 = "24063173" ;//put your wifi password here
//========================================================
SimpleTimer timer;
//char auth[] = "Your Auth. Key"; // You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
const char auth[] = "bd2c91fd614b4d478c780881d06b75b6";
float t , t1; // Declare the variables
float h , h1;
//========================================================
const char* mqtt_server = "broker.mqtt-dashboard.com";
//const char* mqtt_server = "iot.eclipse.org";
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
void setup_wifi() {
delay(100);
// We start by connecting to a WiFi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("MQTT-DHT11-Testing");
}
void callback(char* topic, byte* payload, unsigned int length) // call back "Alex9ufo-DHT3-Command"
{
Serial.print("Command is : [");
Serial.print(topic);
int p =(char)payload[0]-'0';
int chk = DHT.read11(DHT11_PIN);
// if MQTT comes a 0 message, show humidity
if(p==0)
{
Serial.println("to show humidity!]");
Serial.print(" Humidity is: " );
Serial.print(DHT.humidity, 1);
Serial.println('%');
//ramp decreasing intensity, Exhalation (half time):
for (int i=BRIGHT-1;i>0;i--){
digitalWrite(LED, LOW); // turn the LED on.
delayMicroseconds(i*10); // wait
digitalWrite(LED, HIGH); // turn the LED off.
delayMicroseconds(PULSE-i*10); // wait
i--;
delay(0); //to prevent watchdog firing.
}
digitalWrite(LED, HIGH);
}
// if MQTT comes a 1 message, show temperature
if(p==1)
{
// digitalWrite(BUILTIN_LED, HIGH);
Serial.println(" is to show temperature!] ");
int chk = DHT.read11(DHT11_PIN);
Serial.print(" Temp is: " );
Serial.print(DHT.temperature, 1);
Serial.println(' C');
//ramp increasing intensity, Inhalation:
for (int i=1;i<BRIGHT;i++){
digitalWrite(LED, LOW); // turn the LED on.
delayMicroseconds(i*10); // wait
digitalWrite(LED, HIGH); // turn the LED off.
delayMicroseconds(PULSE-i*10); // wait
delay(0); //to prevent watchdog firing.
}
digitalWrite(LED, LOW);
}
Serial.println();
} //end callback
void reconnect() {
// Loop until we're reconnected
while (!client.connected())
{
Serial.print("Attempting MQTT connection...");
// Create a random client ID
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
// Attempt to connect
//if you MQTT broker has clientID,username and password
//please change following line to if (client.connect(clientId,userName,passWord))
if (client.connect(clientId.c_str()))
{
Serial.println("connected");
//once connected to MQTT broker, subscribe command if any
client.subscribe("Alex9ufo-DHT3-Command");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 6 seconds before retrying
delay(6000);
}
}
} //end reconnect()
void setup() {
pinMode(LED, OUTPUT); // LED pin as output.
//========Blynk==============
Blynk.begin(auth, ssid2, password2);
timer.setInterval(1000, sendUptime);
//========Blynk==============
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
int chk = DHT.read11(DHT11_PIN);
Serial.print(" Starting Humidity: " );
Serial.print(DHT.humidity, 1);
Serial.println('%');
Serial.print(" Starting Temparature ");
Serial.print(DHT.temperature, 1);
Serial.println('C');
}
void sendUptime()
{
// 如果要取小數三位 *1000
// double d1 = 30.745678;
// double d2 = int(d1*1000+0.5)/1000; //30.746
float h = (DHT.humidity);
float h1=int(h*1000+0.5)/1000;
float t = (DHT.temperature);
float t1=int(t*1000+0.5)/1000;
Blynk.virtualWrite(V0, t1);
Blynk.virtualWrite(V1, h1);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
long now = millis();
// read DHT11 sensor every 6 seconds
if (now - lastMsg > 6000) {
digitalWrite(LED, !digitalRead(LED));
lastMsg = now;
int chk = DHT.read11(DHT11_PIN);
String msg="";
msg= msg+ DHT.temperature;
char message[58];
msg.toCharArray(message,58);
client.publish("alex9ufo-temp-RaspiData", message);
msg="";
msg= msg+ DHT.humidity;
msg.toCharArray(message,58);
client.publish("alex9ufo-humi-RaspiData",message);
msg="";
msg= msg+ DHT.temperature;
msg = msg+"," ;
msg=msg+DHT.humidity ;
msg.toCharArray(message,58);
Serial.print(" Starting Temparature ");
Serial.print(DHT.temperature, 1);
Serial.print('C');
Serial.print(" Starting Humidity: " );
Serial.print(DHT.humidity, 1);
Serial.println('%');
Serial.println(message);
//publish sensor data to MQTT broker
client.publish("alex9ufo-DHT11-RaspiData", message);
}
//=========Blynk======================
Blynk.run();
timer.run();
}
訂閱:
張貼留言 (Atom)
2024_09 作業3 以Node-Red 為主
2024_09 作業3 (以Node-Red 為主 Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker 2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...
-
python pip 不是内部或外部命令 -- 解決方法 要安裝 Pyqt5 1. 首先,開啟命令提示字元。 2. 輸入 pip3 install pyqt5 好像不能執行 ! ! 錯誤顯示 : ‘ pip3 ’ 不是內部或外部命令、可執行的程式或批...
-
課程講義 下載 11/20 1) PPT 下載 + 程式下載 http://www.mediafire.com/file/cru4py7e8pptfda/106%E5%8B%A4%E7%9B%8A2-1.rar 11/27 2) PPT 下載...
-
• 認 識 PreFix、InFix、PostFix PreFix(前序式):* + 1 2 + 3 4 InFix(中序式): (1+2)*(3+4) PostFix(後序式):1 2 + 3 4 + * 後 序式的運算 例如: 運算時由 後序式的...
沒有留言:
張貼留言