Báo mưa bằng Facebook Messenger

Mô tả dự án: 

Sài Gòn đang vào mùa mưa rồi anh em ạ, mỗi khi mưa xuống lại một nỗi buồn man mác vì quên không cất quần áo :(

Vậy nên hôm nay mình xin hướng dẫn làm một bộ báo mưa bằng qua FB Messenger cực đơn giản, chỉ cắm là chạy!  

Chuẩn bị

  1. Đọc qua bài viết này để biết nguyên lý hoạt động cũng như lấy key để nhắn tin bằng FB Messenger: http://arduino.vn/tutorial/6561-module-sim-da-loi-thoi-nhan-thong-bao-bang-fb-messenger-zalo
  2. Module báo mưa (Loại của mình chân digital có mưa là 0 không mưa là 1)
  3. ESP8266 ở đây mình dùng module nodeMCU

Nào cùng làm

Nối dây:

Nối dây D0 từ cảm biến mưa vào chân D2 (GPIO 4) trên NodeMCU

Cấp nguồn cho cảm biến mưa vào 2 chân GND và VCC

Cắm cáp USB vào NodeMCU

Nạp code:

Các bạn nạp code bên dưới với phần key là key get được như hướng dẫn ở bài:

http://arduino.vn/tutorial/6561-module-sim-da-loi-thoi-nhan-thong-bao-bang-fb-messenger-zalo

Message là nội dung tin nhắn sẽ được gửi đi khi có mưa được mã hóa dạng URL Encode,

các bạn vào https://hs2t.com/itemized/url-encode-decode/ để chuyển đổi từ Tiếng Việt qua URL Encode

WiFiMulti.addAP("KemShop-55LTT", ""); các bạn thay thế bằng tên wifi và password nhà mình để ESP8266 kết nối đến

Còn đây là code:

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>

ESP8266WiFiMulti WiFiMulti;

// constants won't change. They're used here to set pin numbers:
const int rainPin = 4;     // the number of the pushbutton pin
const int ledPin =  2;      // the number of the LED pin

// variables will change:
int rainState = 0;         // variable for reading the pushbutton status
int lastState = 0;
String key = "g183ftk4h";
String message = "M%C6%B0a%20r%E1%BB%93i%20anh%20%C6%A1i%2C%20mau%20c%E1%BA%A5t%20qu%E1%BA%A7n%20%C3%A1o%20%C4%91i%20k%E1%BA%BBo%20v%E1%BB%A3%20m%E1%BA%AFng";

void setup()
{

  Serial.begin(115200);
  // Serial.setDebugOutput(true);

  Serial.println();
  Serial.println();
  Serial.println();

  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(rainPin, INPUT);

  for (uint8_t t = 4; t > 0; t--)
  {
    Serial.printf("[SETUP] WAIT %d...\n", t);
    Serial.flush();
    delay(1000);
  }

  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("KemShop-55LTT", "");
}



void loop()
{
  // read the state of the pushbutton value:
  rainState = digitalRead(rainPin);

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (rainState == 0 && lastState == 0) {
    Serial.printf("RAIN\n");
    lastState = 1;
    // turn LED on:
    digitalWrite(ledPin, HIGH);
    // wait for WiFi connection
    if ((WiFiMulti.run() == WL_CONNECTED))
    {

      std::unique_ptr<BearSSL::WiFiClientSecure> client(new BearSSL::WiFiClientSecure);

      //    client->setFingerprint(fingerprint);
      client->setInsecure();

      HTTPClient https;

      Serial.print("[HTTPS] begin...\n");
      if (https.begin(*client, "https://taymay.herokuapp.com/send/?key="+key+"&message="+message))
      { // HTTPS

        Serial.print("[HTTPS] GET...\n");
        // start connection and send HTTP header
        int httpCode = https.GET();

        // httpCode will be negative on error
        if (httpCode > 0)
        {
          // HTTP header has been send and Server response header has been handled
          Serial.printf("[HTTPS] GET... code: %d\n", httpCode);

          // file found at server
          if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY)
          {
            String payload = https.getString();
            Serial.println(payload);
          }
        }
        else
        {
          Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str());
        }

        https.end();
      }
      else
      {
        Serial.printf("[HTTPS] Unable to connect\n");
      }
    }
  } else if (rainState == 1 && lastState == 1) {
    lastState = 0;
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }

  delay(5000);
}

 

Thành quả

Vậy thôi khá đơn giản giờ thì cứ thoải mái lướt Facebook không sợ mưa rơi :)

Các bạn có thể xem thêm chi tiết ở video bên dưới nhé

lên
26 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

LÀM BLOG VỚI ESP8266, MỘT NĂM TỐN 10K TIỀN ĐIỆN

Nếu như blog của bạn đơn giản và lượng truy cập ở mức bình thường thì mình sẽ hướng dẫn các bạn sử dụng esp8266 làm blog server. Một năm tốn 10k tiền điện :)

Và kết quả bạn sẽ có một trang web như thế này: http://han.boxip.net/

lên
10 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: 

Tasmota - Firmware All in One cho ESP8266

Thấy rất nhiều bạn gặp khó khăn khi làm việc với ESP8266. Nên hôm nay, mình giới thiệu về tasmota một firmware có thể nói là all in one cho ESP8266.

Mình biết đến Tasmota khi tìm hiểu về nhà thông minh. Hồi trước thì mình cày cục tự viết code từ A->Z cho ESP8266 cho đến việc hàn từng cái nút bấm. Và với Tasmota giờ đây chỉ đơn giản là flash vào, rồi config các chân IO rồi sử dụng.

Như trên hình có thể thấy tasmota cho phép cấu hình với rất nhiều các loại nút bấm, relay, cảm biến các loại khác nhau, công việc rất đơn giản chỉ config chân và kết nối là xong (Tổng cộng là 189 loại nhé)

 

lên
1 thành viên đã công nhận bài viết này hữu ích!