กิจกรรม เรียนรู้ บอร์ดสมองกลฝังตัว Esp8266 และ เรียนรู้ Sensor
อุปกรณ์
1.NodeMcu Esp8266 V3
2.DHT11 เซ็นเซอร์วัดอุณหภูมิและความชื้น
3.IR Infrared Sensor Module
4.เซนเซอร์วัดความชื้นในดิน Soil Moisture Sensor Module
โปรแกรม "Arduino ide"
เรื่องที่ 1 ตรวจับวัถุ และส่งข้อมูลเข้า LINE
เรื่องที่ 2 วัดความชื้น และส่งข้อมูลเข้า LINE
เรื่องที่ 3 วัดอุณหภูมิ และความชื้นส่งเข้า LINE
เรื่องที่ 4 วัดระยะทาง และความชื้นส่งเข้า LINE
เรื่องที่ 4 วัดระยะทาง และความชื้นส่งเข้า LINE
โค้ด
#include <ESP8266WiFi.h>
#include <TridentTD_LineNotify.h>
const int pingPin = D1;
int inPin = D2;
#define Buzzer_pin D3
#define BUZZER_OFF 1
#define BUZZER_ON 0
#define LEVEL_0 0
#define LEVEL_1 1
#define LEVEL_2 2
#define LEVEL_3 3
#define LEVEL_4 4
#define LEVEL_5 5
unsigned char flooding_level;
// Your WiFi credentials.
const char* ssid = "CPE-43C6";
const char* pass = "A123456798";
#define LINE_TOKEN "9Rh40dI0ZhMqzq3w9yKFp5KyTwP6FrEUmjUQLHmjdAJ"
/* ตั้งค่าระดับน้ำ (cm) -> index 0 : ไม่มีน้ำท่วม
index 1 : น้ำท่วมระดับ 1
index 2 : น้ำท่วมระดับ 2
index 3 : น้ำท่วมระดับ 3
index 4 : น้ำท่วมระดับ 4
index 5 : น้ำท่วมระดับ 5 */
const long flood_level_cm[6] = { 0, 10, 20, 30, 40, 50 };
#define SENSOR_DISTANCE (81)//(100) // ระยะจากพื้นถึง sensor (cm)
// ###################################################################
void setup()
{
Serial.begin(9600);
pinMode(Buzzer_pin, OUTPUT);
digitalWrite(Buzzer_pin, BUZZER_OFF);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED)
{
// ทำการ Print "Connectiong..." ทุก 1000ms
Serial.println("Connecting... ");
Serial.printf("Connection Status: %d\n", WiFi.status());
delay(1000);
}
Serial.print("Wi-Fi connected.");
Serial.print("IP Address : ");
Serial.println(WiFi.localIP());
// กำหนด Line Token
LINE.setToken(LINE_TOKEN);
// Welcome message
LINE.notify("เครื่องแจ้งเตือนน้ำท่วมเชื่อมต่อ WiFi แล้ว");
flooding_level = LEVEL_0;
}
unsigned char buzzer_timer;
void level_mng(long cm)
{
long level_dif;
unsigned char flooding_level_buf = flooding_level;
bool flag_line_send = 0;
String msg;
level_dif = SENSOR_DISTANCE - cm;
Serial.print("Flooding Level: ");
Serial.print(level_dif);
Serial.println(" cm");
if ( level_dif < 0 )
flooding_level = LEVEL_0;
else
{
if ( flooding_level == LEVEL_5 )
{
if ( level_dif <= flood_level_cm[LEVEL_4] )
flooding_level = LEVEL_4;
}
if ( flooding_level == LEVEL_4 )
{
if ( level_dif >= flood_level_cm[LEVEL_5] )
flooding_level = LEVEL_5;
else if( level_dif <= flood_level_cm[LEVEL_3] )
flooding_level = LEVEL_3;
}
if ( flooding_level == LEVEL_3 )
{
if ( level_dif >= flood_level_cm[LEVEL_4] )
flooding_level = LEVEL_4;
else if ( level_dif <= flood_level_cm[LEVEL_2] )
flooding_level = LEVEL_2;
}
if ( flooding_level == LEVEL_2 )
{
if ( level_dif >= flood_level_cm[LEVEL_3] )
flooding_level = LEVEL_3;
else if ( level_dif <= flood_level_cm[LEVEL_1] )
flooding_level = LEVEL_1;
}
if ( flooding_level == LEVEL_1 )
{
if ( level_dif >= flood_level_cm[LEVEL_2] )
flooding_level = LEVEL_2;
else if ( level_dif <= flood_level_cm[LEVEL_0] )
flooding_level = LEVEL_0;
}
if ( flooding_level == LEVEL_0 )
{
for (int i=0; i<6; i++)
{
if ( level_dif >= flood_level_cm[i] )
flooding_level = i;
}
}
}
if ( flooding_level_buf != flooding_level )
{
flag_line_send = 1;
}
if ( flooding_level == 5 )
{
if (buzzer_timer <= 5) // 1 sec
{
digitalWrite(Buzzer_pin, BUZZER_ON);
}
else if (buzzer_timer <= 10)
{
digitalWrite(Buzzer_pin, BUZZER_OFF);
}
else
buzzer_timer = 0;
buzzer_timer++;
}
else
{
digitalWrite(Buzzer_pin, BUZZER_OFF);
buzzer_timer = 0;
}
if ( flag_line_send )
{
flag_line_send = 0;
if (flooding_level_buf < flooding_level) // level up
{
msg = "ระดับน้ำเพิ่มขึ้นเป็นระดับ " + String(flooding_level) + "\r\n" +
"สูงจากพื้น " + String(level_dif) + " เซ็นติเมตร";
}
else // level down
{
if ( flooding_level == 0 )
{
msg = "น้ำแห้งแล้ว";
}
else
{
msg = "ระดับน้ำลดลงเป็นระดับ " + String(flooding_level) + "\r\n" +
"สูงจากพื้น " + String(level_dif) + " เซ็นติเมตร";
}
}
LINE.notify(msg);
}
}
unsigned long ms_buf;
void loop()
{
long duration, cm;
unsigned long ms_dif;
ms_dif = millis() - ms_buf;
if ( ms_dif >= 200 ) // 200 ms
{
ms_buf = millis();
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
pinMode(inPin, INPUT);
duration = pulseIn(inPin, HIGH);
cm = microsecondsToCentimeters(duration);
/* Serial.print(cm);
Serial.println("cm");*/
level_mng(cm);
}
}
long microsecondsToCentimeters(long microseconds)
{
// ความเร็วเสียงในอากาศประมาณ 340 เมตร/วินาที หรือ 29 ไมโครวินาที/เซนติเมตร
// ระยะทางที่ส่งเสียงออกไปจนเสียงสะท้อนกลับมาสามารถใช้หาระยะทางของวัตถุได้
// เวลาที่ใช้คือ ระยะทางไปกลับ ดังนั้นระยะทางคือ ครึ่งหนึ่งของที่วัดได้
return microseconds / 29 / 2;
}
------------------------------------------------------------
line notify : https://notify-bot.line.me/th/
URL Decoder https://meyerweb.com/eric/tools/dencoder/
โค้ด https://www.facebook.com/223683641421434/posts/622606241529170/
-------------------------------------------------
โค้ด 2
void Line_Notify1(String message1) ;
#include <ESP8266WiFi.h>
#define WIFI_SSID "MR DOM" /////////////*************แก้
#define WIFI_PASSWORD "audomidea2021"////////**************แก้
#define LINE_TOKEN_PIR "nd6z68kfsOW8BpoETcPniQGNOnTfDLXeQvkGHLGnTnf"////***************แก้
#define PirPin D7
String message1 = "%E0%B9%84%E0%B8%94%E0%B9%89%E0%B8%A3%E0%B8%B1%E0%B8%9A%E0%B8%88%E0%B8%94%E0%B8%AB%E0%B8%A1%E0%B8%B2%E0%B8%A2";//****************แก้
bool beep_state = false;
bool send_state = false;
uint32_t ts, ts1, ts2;
void setup() {
Serial.begin(115200);
Serial.println();
pinMode(PirPin, INPUT);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("connecting");
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("connecting");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(10);
}
Serial.println();
Serial.print("connected: ");
Serial.println(WiFi.localIP());
delay(100);
Serial.println("Pir Ready!!");
ts = ts1 = ts2 = millis();
}
void loop() {
if ((digitalRead(PirPin) == HIGH) && (beep_state == false) && (WiFi.status() == WL_CONNECTED)) {
while (digitalRead(PirPin) == HIGH) delay(100);
Serial.println("Detect !");
Line_Notify1(message1);
beep_state = true;
}
delay(10);
}
void Line_Notify1(String message) {
WiFiClientSecure client;
if (!client.connect("notify-api.line.me", 443)) {
Serial.println("connection failed");
delay(2000);
return;
}
String req = "";
req += "POST /api/notify HTTP/1.1\r\n";
req += "Host: notify-api.line.me\r\n";
req += "Authorization: Bearer " + String(LINE_TOKEN_PIR) + "\r\n";
req += "Cache-Control: no-cache\r\n";
req += "User-Agent: ESP8266\r\n";
req += "Content-Type: application/x-www-form-urlencoded\r\n";
req += "Content-Length: " + String(String("message=" + message1).length()) + "\r\n";
req += "\r\n";
req += "message=" + message1;
// Serial.println(req);
client.print(req);
delay(20);
while (client.connected()) {
String line = client.readStringUntil('\n');
if (line == "\r") {
break;
}
}
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น