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ả

Module sim đã lỗi thời? Nhận thông báo bằng FB Messenger (Zalo)

Chắc hẳn anh em đã quá quen thuộc với việc dùng module sim để nhắn sms thông báo trạng thái nhà cửa, ruộng vườn rồi. Đến thời điểm hiện tại thì module sim vẫn có một ưu thế là mạng di động đã phủ sóng toàn quốc, không cần cài app nhưng SMS sẽ rất là tốn kém chưa kể đến việc phải thường xuyên nạp tiền và kiểm tra hạn sử dụng.

Hôm nay, tại đây, chúng ta cùng nhau chứng kiến một sự khởi đầu mới của xu hướng công nghệ trên toàn cầu (mượn lời bác Quảng) đó là Facebook Messenger. Thực tế, anh em đều phải công nhận là giờ máy ai cũng có FB messenger. Cho nên mình mới nghĩ đến việc nhận thông báo thay vì SMS thì nhận qua FB Messenger. Cũng có thể coi là chẳng cần phải cài thêm app, lại còn nhận được nội dung tiếng Việt có dấu một cách dễ dàng nữa :)

Mình sẽ có một phiên bản Việt hóa với nhận thông báo bằng Zalo, nhưng thời điểm hiện tại Zalo đòi hỏi nhiều thủ tục để đăng ký app quá nên mình sẽ update với anh em sau nhé!

lên
26 thành viên đã đánh giá bài viết này hữu ích.

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!