11191
(ณัฐนน รอดรวมมิตร์)
พฤศจิกายน 20, 2019, 9:35am
1
อย่างที่บอกผมต้องการทำตู้ควบคุมความชื้น อุณภูมิ ด้วยESP2866 แต่ผมติดปันหาตรงไม่สามารถหาโค้ดที่สามาถเปรียบเทียบค่าของDHT11 กับสวิตที่สามาถปรับค่าของแอพ blynkได้ จึงมาขอความรู้พี่ๆหน่อยครับ นี่คือโค้ดที่เขียนเอาใว้
**********************************************************************************************
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "************";
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "*****";
char pass[] = "******";
#define DHTPIN D4 // What digital pin we're connected to
// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
SimpleTimer timer;
// This function sends Arduino's up time every second to Virtual Pin (5).
// In the app, Widget's reading frequency should be set to PUSH. This means
// that you define how often to send data to Blynk App.
void sendSensor()
{
float h = dht.readHumidity();
float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// You can send any value at any time.
// Please don't send more that 10 values per second.
Blynk.virtualWrite(V5, h);
Blynk.virtualWrite(V6, t);
}
void setup()
{
Serial.begin(115200); // See the connection status in Serial Monitor
Blynk.begin(auth, ssid, pass);
dht.begin();
// Setup a function to be called every second
timer.setInterval(1000L, sendSensor);
}
void loop()
{
Blynk.run(); // Initiates Blynk
timer.run(); // Initiates SimpleTimer
}
Remy_Martin
(Permpol Thanapunnamas)
พฤศจิกายน 20, 2019, 12:15pm
2
ในนี้มีโค้ตที่ไว้เปรียบเทียบค่า t กับ h อยู่นะครับ ผมจำไม่ได้ละลองไล่ดูหน่อย ค้นเจอแล้วเอามาแปะไว้หน่อย
11191
(ณัฐนน รอดรวมมิตร์)
พฤศจิกายน 20, 2019, 2:18pm
3
ของพี่คนนี้ผมไม่เข้าใจหลายๆจุดน่ะครับผมเลยต้องมาถามเพิ่มเป็นกระทู้นี้
int setTemp;
int setHumid;
BLYNK_WRITE(V22) //temperature slider in app on pin V22
{
setTemp = param.asInt();
}
BLYNK_WRITE(V23) //temperature slider in app on pin V23
{
setHumid = param.asInt();
}
//////////////////////////////////////////
DHT_Unified dht(DHTPIN, DHTTYPE);
//***BLYNK TOKEN**//
char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
//***LINE TOKEN***//
#define LINE_TOKEN "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
SimpleTimer timer;
BLYNK_CONNECTED() {
Blynk.syncAll();
}
void setup()
{
Serial.begin(115200);
Serial.println("xxxxxxx");
Serial.println("xxxxxxxx");
Serial.println(LINE.getVersion());
LINE.setToken(LINE_TOKEN);
LINE.notify("myarduino.net");
Blynk.begin(auth, "xxxx", "xxxxxxxx"); //ใส่ชื่อ WIFI and PASSWORD
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
pinMode(D1, OUTPUT); //***ควบคุมอุณหภูมิ***///
digitalWrite(D1, HIGH);
dht.begin();
timer.setInterval(1000L, sendUptime);
}
void sendUptime()
{
//*****ชุดคำสั่งการทำงานของอุณหภูมิ******//
Blynk.virtualWrite(V5, millis() / 1000);
sensors_event_t event;
dht.temperature().getEvent(&event);
if (!isnan(event.temperature)) {
Blynk.virtualWrite(V1, event.temperature);
if (event.temperature >= `setTemp`) {
digitalWrite(D1, LOW);
String LineText;
String string1 = "อุณหภูมิ ต่ำกว่ากำหนด ";
String string2 = " °C";
LineText = string1 + event.temperature + string2;
Serial.print("Line ");
Serial.println(LineText);
LINE.notify(LineText);
}
else {
digitalWrite(D1, HIGH);
}
}
dht.humidity().getEvent(&event);
if (!isnan(event.relative_humidity)) {
Blynk.virtualWrite(V2, event.relative_humidity);
if (event.temperature >= `setHumid`) {
digitalWrite(D7, LOW);
String LineText;
String string1 = "ความชื้น ต่ำกว่ากำหนด ";
String string2 = " %";
LineText = string1 + event.temperature + string2;
Serial.print("Line ");
Serial.println(LineText);
LINE.notify(LineText);
}
else {
digitalWrite(D7, HIGH);
}
}
}
//*********************************************************//
void loop()
{
//if(Blynk.connected()) {
Blynk.run();
timer.run();
}
Remy_Martin
(Permpol Thanapunnamas)
พฤศจิกายน 20, 2019, 2:23pm
4
ตอนนี้เข้าใจว่าอะไรบ้างครับ อธิบายให้ฟังหน่อย จะได้ปรับมายเซตกันถูก
11191
(ณัฐนน รอดรวมมิตร์)
พฤศจิกายน 20, 2019, 2:29pm
5
บันทัดนี้ผมเข้าใจว่าให้ดึงค่าจากปุ่มในแอพ blynk เพิ่อมากำหนดในส่วนต่อไป
int setTemp;
int setHumid;
BLYNK_WRITE(V22) //temperature slider in app on pin V22
{
setTemp = param.asInt();
}
BLYNK_WRITE(V23) //temperature slider in app on pin V23
{
setHumid = param.asInt();
}
* **ส่วนตัวนี้ก็เป็นการเซ็ดค่าเพื่อเชื่อต่อBlynk กับ wifi ต่างๆ**
}
//////////////////////////////////////////
DHT_Unified dht(DHTPIN, DHTTYPE);
//* **BLYNK TOKEN** //
char auth[] = “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”;
// ***LINE TOKEN*** //
#define LINE_TOKEN “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”
SimpleTimer timer;
BLYNK_CONNECTED() {
Blynk.syncAll();
}
ส่วนบันทัดนี้ก็เป็นการออกคำสั่งให้ปริ้นค่าต่างๆออกทางมอนิเตอร์ตอนเชื่อต่อสันยานต่างๆ
Serial.begin(115200);
Serial.println(“xxxxxxx”);
Serial.println(“xxxxxxxx”);
Serial.println(LINE.getVersion());
LINE.setToken(LINE_TOKEN);
LINE.notify(“[myarduino.net](http://myarduino.net/)”);
Blynk.begin(auth, “xxxx”, “xxxxxxxx”); //ใส่ชื่อ WIFI and PASSWORD
บันทัดนี้กำหนดค่าขาต่างๆว่ามีหน้าที่ทำอ่ะไรบ้าง
<div data-theme-tiles="1">
pinMode(LED_BUILTIN, OUTPUT);
</div>
<div data-theme-tiles="1">
digitalWrite(LED_BUILTIN, HIGH);
</div>
<div data-theme-tiles="1">
pinMode(D1, OUTPUT); // ***ควบคุมอุณหภูมิ*** ///
</div>
<div data-theme-tiles="1">
digitalWrite(D1, HIGH);
</div>
<div data-theme-tiles="1">
dht.begin();
</div>
<div data-theme-tiles="1">
timer.setInterval(1000L, sendUptime);
</div>
<div data-theme-tiles="1">
}
</div>
ที่ไม่เข้าใจเลยคือทั้งหมดของบันทัดนี้ครับผมไม่เคยเข้าถึงโค้ดนี้เลย
void sendUptime()
{
// *****ชุดคำสั่งการทำงานของอุณหภูมิ***** *//
Blynk.virtualWrite(V5, millis() / 1000);
sensors_event_t event;
dht.temperature().getEvent(&event);
if (!isnan(event.temperature)) {
Blynk.virtualWrite(V1, event.temperature);
if (event.temperature = `setTemp` ) {
digitalWrite(D1, LOW);
String LineText;
String string1 = "อุณหภูมิ ต่ำกว่ากำหนด “;
String string2 = " °C”;
LineText = string1 + event.temperature + string2;
Serial.print("Line ");
Serial.println(LineText);
LINE.notify(LineText);
}
else {
digitalWrite(D1, HIGH);
}
}
dht.humidity().getEvent(&event);
if (!isnan(event.relative_humidity)) {
Blynk.virtualWrite(V2, event.relative_humidity);
if (event.temperature = `setHumid` ) {
digitalWrite(D7, LOW);
String LineText;
String string1 = "ความชื้น ต่ำกว่ากำหนด “;
String string2 = " %”;
LineText = string1 + event.temperature + string2;
Serial.print("Line ");
Serial.println(LineText);
LINE.notify(LineText);
}
else {
digitalWrite(D7, HIGH);
}
}
}
//*********************************************************//
void loop()
{
//if(Blynk.connected()) {
Blynk.run();
timer.run();
}
11191
(ณัฐนน รอดรวมมิตร์)
พฤศจิกายน 22, 2019, 4:14am
8
void sendUptime()
{
// *****ชุดคำสั่งการทำงานของอุณหภูมิ***** *//
Blynk.virtualWrite(V5, millis() / 1000);
sensors_event_t event; //ไม่เข้าใจว่าคำสั่งนี้มีใว้ทำอ่ะไร เพราะตอผมคอมพลายมันบอกว่า ไม่ได้ถูกประกาศในขอบเขตนี้
dht.temperature().getEvent(&event);
if (!isnan(event.temperature)) {
Blynk.virtualWrite(V1, event.temperature); // ส่วนพวกนี้ผมเข้าใจว่าให้ดึงค่ามาเปรียบเทียบกับอุณะภูมิ
if (event.temperature >= `setTemp` )//ท่ามากกว่าหรือเท่ากับให้Low {
digitalWrite(D1, LOW);
String LineText;
String string1 = "อุณหภูมิ ต่ำกว่ากำหนด “;
String string2 = " °C”;
}
else//ท่าไม่ใช่ให้ HIGH {
digitalWrite(D1, HIGH);
}
}
dht.humidity().getEvent(&event);
if (!isnan(event.relative_humidity)) {
Blynk.virtualWrite(V2, event.relative_humidity); // ตัวนี้น่าจะเป็นการดึงค่าจากblynkมาเปรียบเทียบกับความชื้น
if (event.temperature >= `setHumid` )//ท่ามากกว่าหรือเท่ากับให้LOW {
digitalWrite(D7, LOW);
String LineText;
String string1 = "ความชื้น ต่ำกว่ากำหนด “;
String string2 = " %”;
}
else {
digitalWrite(D7, HIGH);
}
}
}
void loop()
{
//if(Blynk.connected()) {
Blynk.run();
timer.run();
}
Remy_Martin
(Permpol Thanapunnamas)
พฤศจิกายน 22, 2019, 4:29pm
9
void sendUptime()
{
// *****ชุดคำสั่งการทำงานของอุณหภูมิ***** *//
Blynk.virtualWrite(V5, millis() / 1000);
sensors_event_t event;
dht.temperature().getEvent(&event);
if (!isnan(event.temperature)) {
Blynk.virtualWrite(V1, event.temperature);
if (event.temperature = `setTemp` ) {
digitalWrite(D1, LOW);
String LineText;
String string1 = "อุณหภูมิ ต่ำกว่ากำหนด “;
String string2 = " °C”;
LineText = string1 + event.temperature + string2;
Serial.print("Line ");
Serial.println(LineText);
LINE.notify(LineText);
}
else {
digitalWrite(D1, HIGH);
}
}
dht.humidity().getEvent(&event);
if (!isnan(event.relative_humidity)) {
Blynk.virtualWrite(V2, event.relative_humidity);
if (event.temperature = `setHumid` ) {
digitalWrite(D7, LOW);
String LineText;
String string1 = "ความชื้น ต่ำกว่ากำหนด “;
String string2 = " %”;
LineText = string1 + event.temperature + string2;
Serial.print("Line ");
Serial.println(LineText);
LINE.notify(LineText);
}
else {
digitalWrite(D7, HIGH);
}
}
}
ฟังก์ชันนี้จะเป็นการทำงานของ เซ็นเซฮร์ครับ ทำหน้าที่ทั้งอ่านค่าจากตัวเซนเซอร์ด้วยคำสั่งนี้
sensors_event_t event;
dht.temperature().getEvent(&event);
ส่วนนี้จะเป็นเงื่อนไขที่เรากำหนดว่า ถ้าค่าเซ็นเซฮร์ที่อ่านได้ ตรงกับเงื่อนไขให้มัน On พร้อมกับส่งข้อความไปหา line ด้วย แต่ถ้าไม่ใช่ก็ให้ off ไป
if (event.temperature >= `setTemp` ) {
digitalWrite(D1, LOW);
String LineText;
String string1 = "อุณหภูมิ ต่ำกว่ากำหนด “;
String string2 = " °C”;
LineText = string1 + event.temperature + string2;
Serial.print("Line ");
Serial.println(LineText);
LINE.notify(LineText);
}
else {
digitalWrite(D1, HIGH);
}
การทำงานทั้งหมดจะทำงานวนๆ อยู่อย่างนี้ตามคำสั่งที่กำหนดไว้ใน setup ว่าให้ทำงานทุกๆ กี่วินาที
timer.setInterval(1000L, sendUptime);
Remy_Martin
(Permpol Thanapunnamas)
พฤศจิกายน 22, 2019, 4:31pm
10
ตอนนี้พยายาม อ่านและแยกให้ออกก่อนว่าแต่ละก่อนคำสั่งอันไหน เกี่ยวข้องกันบ้าง อย่างถ้า line เราไม่ได้ใช้ก็ตัดออกไป จะได้ไม่งง
11191
(ณัฐนน รอดรวมมิตร์)
พฤศจิกายน 22, 2019, 4:57pm
12
if (event.temperature >= `setTemp` ) {
digitalWrite(D1, LOW);
String LineText;
String string1 = "อุณหภูมิ ต่ำกว่ากำหนด “;
String string2 = " °C”;
LineText = string1 + event.temperature + string2;
Serial.print("Line ");
Serial.println(LineText);
LINE.notify(LineText);
}
else {
digitalWrite(D1, HIGH);
}
เท่าที่ผมเข้าใจคือท่าเราไม่ได้จะส่งไปไลน์บรรทัดนี้คือลบออกได้เลยถูกไหมครับ
void sendUptime()
{
// *****ชุดคำสั่งการทำงานของอุณหภูมิ***** *//
Blynk.virtualWrite(V5, millis() / 1000);
sensors_event_t event;
dht.temperature().getEvent(&event);
if (!isnan(event.temperature)) {
Blynk.virtualWrite(V1, event.temperature);
}
dht.humidity().getEvent(&event);
if (!isnan(event.relative_humidity)) {
Blynk.virtualWrite(V2, event.relative_humidity);
}
}
แล้วโค้ดที่เหลือจากการที่ตัดการส่งข้อมูลเข้า ไลน์ จะเหลือประมาณนี้ผมเข้าใจถูกไหมครับ
void sendUptime()
{
// *****ชุดคำสั่งการทำงานของอุณหภูมิ***** *//
Blynk.virtualWrite(V5, millis() / 1000);
sensors_event_t event;
dht.temperature().getEvent(&event);
if (!isnan(event.temperature)) //ตรงนี้เป็นการกำหนดเงื่อนไข >=, <= , == ใช่ไหมครับ
{
Blynk.virtualWrite(V1, event.temperature); //หรือผมต้องมากำหนด เงื่อนไข >=, <= , == ตรงนีครับ
}
dht.humidity().getEvent(&event);
if (!isnan(event.relative_humidity)) {
Blynk.virtualWrite(V2, event.relative_humidity);
}
}
สุดท้ายเลยคือ
เป็นแบบนี้คือผมต้องลงไลเบอรี่เพิ่มหรือผมต้องไปกำหนดตัวไหนเพิ่มหลอครับ
Remy_Martin
(Permpol Thanapunnamas)
พฤศจิกายน 22, 2019, 5:19pm
13
copy error ทั้งหมดมาเลยครับมันเห็นแต่ส่วนเดียว
11191
(ณัฐนน รอดรวมมิตร์)
พฤศจิกายน 22, 2019, 5:20pm
14
Arduino: 1.8.10 (Windows 10), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled, All SSL ciphers (most compatible), 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200"
C:\Users\User\Desktop\______\______.ino: In function 'void sendUptime()':
______:65:2: error: 'sensors_event_t' was not declared in this scope
sensors_event_t event;
^
______:65:18: error: expected ';' before 'event'
sensors_event_t event;
^
______:66:6: error: 'class DHT' has no member named 'temperature'
dht.temperature().getEvent(&event);
^
______:66:30: error: 'event' was not declared in this scope
dht.temperature().getEvent(&event);
^
______:71:6: error: 'class DHT' has no member named 'humidity'
dht.humidity().getEvent(&event);
^
C:\Users\User\Desktop\______\______.ino: In function 'void setup()':
______:87:28: error: 'sendSensor' was not declared in this scope
timer.setInterval(1000L, sendSensor);
^
Multiple libraries were found for "Wire.h"
Used: C:\Users\User\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\Wire
Not used: C:\Users\User\Documents\Arduino\libraries\Wire
Multiple libraries were found for "ESP8266WiFi.h"
Used: C:\Users\User\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\ESP8266WiFi
Multiple libraries were found for "BlynkSimpleEsp8266.h"
Used: C:\Users\User\Documents\Arduino\libraries\Blynk
Multiple libraries were found for "DHT.h"
Used: D:\Arduino\libraries\DHT-sensor-library-master
Multiple libraries were found for "Adafruit_Sensor.h"
Used: D:\Arduino\libraries\Adafruit_Sensor-master
exit status 1
'sensors_event_t' was not declared in this scope
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Remy_Martin
(Permpol Thanapunnamas)
พฤศจิกายน 23, 2019, 12:39am
15
วางโค้ตล่าสุดแบบเต็มๆ ด้วยครับ
11191
(ณัฐนน รอดรวมมิตร์)
พฤศจิกายน 23, 2019, 2:20pm
17
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
#include <SimpleTimer.h>
#define DHTPIN D4 // กำหนดขาให้กับอุปกรณ์ตรวจสอบความชื้น DHT11
#define DHTTYPE DHT11
//////////////////////////////////////////จุดที่เพิ่ม
int setTemp;
int setHumid;
BLYNK_WRITE(V4) //temperature slider in app on pin V22
{
setTemp = param.asInt();
}
BLYNK_WRITE(V3) //temperature slider in app on pin V23
{
setHumid = param.asInt();
}
//////////////////////////////////////////
DHT dht(DHTPIN, DHTTYPE);
SimpleTimer timer;
//* **BLYNK TOKEN** //
char auth[] = "XXXXXXXXXXXXXXXX";
char ssid[] = "AndroidAP";
char pass[] = "123654789a";
BLYNK_CONNECTED() {
Blynk.syncAll();
}
void sendSensor()
{
float h = dht.readHumidity();
float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// You can send any value at any time.
// Please don't send more that 10 values per second.
Blynk.virtualWrite(V5, h);
Blynk.virtualWrite(V6, t);
}
void setup()
{
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
pinMode(D1, OUTPUT); // ***ควบคุมอุณหภูมิ*** ///
digitalWrite(D1, HIGH);
dht.begin();
timer.setInterval(1000L, sendUptime);
}
void sendUptime()
{
// *****ชุดคำสั่งการทำงานของอุณหภูมิ***** *//
Blynk.virtualWrite(V5, millis() / 1000);
sensors_event_t event;
dht.temperature().getEvent(&event);
if (!isnan(event.temperature)) //ตรงนี้เป็นการกำหนดเงื่อนไข >=, <= , == ใช่ไหมครับ
{
Blynk.virtualWrite(V1, event.temperature); //หรือผมต้องมากำหนด เงื่อนไข >=, <= , == ตรงนีครับ
}
dht.humidity().getEvent(&event);
if (!isnan(event.relative_humidity)) {
Blynk.virtualWrite(V2, event.relative_humidity);
}
}
void loop()
{
//if(Blynk.connected()) {
Blynk.run();
timer.run();
}
Remy_Martin
(Permpol Thanapunnamas)
พฤศจิกายน 24, 2019, 8:33am
18
ตอนนี้ มี library ซ้ำซ้อนกันอยู่ครับ ลบบบรทัดที่มาร์คไว้ออกไปเลย ลบไฟล์นะครับ
11191
(ณัฐนน รอดรวมมิตร์)
พฤศจิกายน 24, 2019, 1:49pm
19
พอลบตามที่บอกแล้วก็ขึ้นเออเร่อนี้ต่อครับ
/////////////////////////////////////////////////////////////////////////////////////////////
Arduino: 1.8.10 (Windows 10), Board: “NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled, All SSL ciphers (most compatible), 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200”
Multiple libraries were found for “ESP8266WiFi.h”
______:4:17: error: DHT.h: No such file or directory
Used: C:\Users\User\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\ESP8266WiFi
#include <DHT.h>
Multiple libraries were found for “BlynkSimpleEsp8266.h”
^
Used: C:\Users\User\Documents\Arduino\libraries\Blynk
compilation terminated.
exit status 1
DHT.h: No such file or directory
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.