Store and share experiences about robocon, IoT, Embedded...
  • Home
  • Linux
  • Window
    • Latex
    • Matlab
  • Embedded programming
    • Jetson Tx1
    • Raspberry Pi
    • Raspberry Pico
  • Internet of things
    • HTTP+MySQL cho IoT
    • Websocket+Nodejs
    • ESP32
  • Electronics and robots
    • Robocon
    • Arduino
    • RISCV
    • FPGA
  • Network and devices
    • Basic CCNA
  • IoT Server
  • Q&A (Hỏi đáp)
  • About
No Result
View All Result
  • Home
  • Linux
  • Window
    • Latex
    • Matlab
  • Embedded programming
    • Jetson Tx1
    • Raspberry Pi
    • Raspberry Pico
  • Internet of things
    • HTTP+MySQL cho IoT
    • Websocket+Nodejs
    • ESP32
  • Electronics and robots
    • Robocon
    • Arduino
    • RISCV
    • FPGA
  • Network and devices
    • Basic CCNA
  • IoT Server
  • Q&A (Hỏi đáp)
  • About
No Result
View All Result
Store and share experiences about robocon, IoT, Embedded...
No Result
View All Result
Home Web of things HTTP+MySQL cho IoT

IoT webserver- Gửi thông báo bằng email từ ESP8266 không dùng IFTTT

Chúng ta sẽ sử dụng ESP8266 gửi một email thông báo đến tài khoản gmail thông qua giao thức HTTP tới một script viết bằng PHP

admin by admin
November 19, 2020
in HTTP+MySQL cho IoT, Web of things
1 0
15

Trước đây, ứng dụng gửi thông báo từ một cảm biến đến điện thoại thông qua SMS rất được ưa chuộng. Thời gian sau đó, với sự phát triển của internet và điện thoại thông minh, cách gửi thông báo cũng trở nên rất đa dạng như qua email, facebook status, vv… Tuy nhiên, các ứng dụng này thường thông qua một bên thứ ba đó là IFTTT (IF THIS THEN THAT) , quá trình xử lý qua trung gian khiến chúng ta cảm thấy có độ trễ. Và theo xu hướng “do it yourself”, chúng ta không dựa vào IFTTT nữa. Ứng dụng kĩ thuật Web vào Internet of things, chúng ta sẽ tự viết một đoạn script bằng PHP để ESP8266 giao tiếp và gửi thông báo đến điện thoại bằng email.

Các bước tiến hành:

  1. Tạo một webserver miễn phí, để có thể viết PHP và MySql ( sử dụng cho nhiều project khác)
  2. Viết mã nguồn PHP cho việc nhận request từ ESP8266, gửi thông báo đến gmail
  3. Viết mã nguồn cho ESP8266 gửi các bản tin request kèm theo giá trị cảm biến hoặc các sự kiện phát hiện được.

Trong bài viết này tôi hướng dẫn các bạn đăng kí sử dụng free web hosting của https://www.000webhost.com

Sơ đồ hoạt động của hệ thống như sau:

Truy cập vào website, đăng kí tài khoản free

Sau khi hoàn tất, thực hiện tạo website

Sau khi hoàn tất tạo website, chúng ta sẽ có giao diện quản lý cpanel như sau:

Trước khi vào viết mã nguồn PHP, hãy chọn cho phép chức năng host gửi email trong mục Website Settings/General

Chúng ta hãy chọn File manager để thực hiện viết mã nguồn PHP

Chọn vào New File để thực hiện tạo file PHP mới

Chúng ta sẽ tạo ra một file PhP mới có tên email-notification.php

II. Viết mã nguồn PHP cho việc nhận request từ ESP8266

Thêm đoạn script php sau vào file vừa tạo

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<span style="font-size: 12pt;">
 
<?php
 
// địa chỉ mail sẽ nhận thông báo
$email_address = "xxxstonline@gmail.com";
 
// api_key_esp là key dùng cho cả esp và trên server, cần trùng nhau
$api_key=$PIN12=null;
 
$api_key_value = "tPmAT5Ab3j7F9";
$msg = "Xin chào\nĐây là thông báo được kích hoạt từ ESP8266\n";
 
 
if(isset($_GET['api_key_esp'])) {
    $api_key = test_input($_GET["api_key_esp"]);
    if($api_key == $api_key_value) {
        $PIN12 = test_input($_GET["PIN12"]);
      
        
        // Email message
        $email_msg = "PIN 12: " . $PIN12;
        
        // Use wordwrap() if lines are longer than 70 characters
       //$email_msg = wordwrap($email_msg, 70);
        
        // Uncomment the next if statement to set a threshold
        // ($value1 = temperature, $value2 = humidity, $value3 = pressure)
        /*if($value1 < 24.0){
            echo "Temperature below threshold, don't send email";
            exit;
        }*/
        
        // send email with mail(receiver email address, email subject, email message)
        if(mail($email_address, "[Thông báo] ESP8266 đã gửi bản tin mới", $msg))
        echo "Đã gửi email thành công!";
        else
        echo " Chú ý: gửi email không thành công!";
    }
    else {
        echo "Sai mã API_KEY_ESP";
    }
 
}
 
else echo "Xin chào, hãy gửi request của bạn gồm api_key_esp và giá trị Pin 14";
 
 
function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
 
?></span>

 

Sau khi lưu file, chúng ta hãy truy cập đường dẫn sau để kiểm tra hoạt động của file vừa tạo (Do địa chỉ 000webhost đã hết hạn, tôi thay bằng link host cố định để mọi người test) http://iot.luuvachiase.net/email-notification.php

Chúng ta sẽ nhận được kết quả : “Xin chào, hãy gửi request của bạn gồm api_key_esp và giá trị Pin 14”

Tiếp tục test với đường dẫn chưa api_key và giá trị của PIN12

http://iot.luuvachiase.net/email-notification.php?api_key=tPmAT5Ab3j7F9&PIN12=0

Chúng ta chọn vào “Không phải là spam” để có thể nhận email thông báo

Làm lại, ta thấy email đã được thực hiện gưi và thông báo trong hộp thư đến. Successs!

III. Viết mã nguồn cho ESP8266 gửi request đến Webserver.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12pt;">
#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
 
const char* ssid     = "Your-SSID";  
const char* password = "Your-Password";
 
const char* host     = "luuvachiase.000webhostapp.com"; // Your domain  
String path          = "/email-notification.php?api_key_esp=xxxxxxxxx"; // Cái này tự đặt
String path_value    = "&PIN12=0";  
 
 
void setup() {  
 
  
//  pinMode(14, OUTPUT);
//  pinMode(13, OUTPUT);
//  pinMode(12, OUTPUT);
  pinMode(12, INPUT_PULLUP);
  Serial.begin(115200);
 
  delay(10);
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
  int wifi_ctr = 0;
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
 
  Serial.println("WiFi connected");  
// Serial.println("IP address: " + WiFi.localIP());
}
 
void loop() {  
  Serial.print("connecting to ");
  Serial.println(host);
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
count=0;
while(1)
{
      
        if(count==lost)
          {
            Serial.println("OOPS-Connetion FAIL");
            Serial.println("Retry connect HOST");    
            err++;
                                      
            break;
                            
          }
// Nếu lần kết nối trước không thành công thì kết nối lại                          
       count=lost;
  
              
   while(digitalRead(12)==HIGH)
   {      
  delay(500);
  Serial.println("wait...");
   }
  delay(1000);
  Serial.println("SEND GET...update data ");                
  client.print(String("GET ")+ path + path_value + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection:keep-alive\r\n\r\n");
 
  delay(1000); // wait for server to respond
  
  // read response
  String section="header";
  while(client.available())
  {
     String line = client.readStringUntil('\r');
     Serial.print(line);
     count++;
  }
 
    
}// while
}// loop</span>

Sau đó chúng ta chạy thử để xem kết quả

Kết quả khi chúng ta nhấn nút GPIO12

Đến đây chúng ta đã bước đầu thành công việc gửi thông báo từ ESP8266 bằng email đến điện thoại. Việc còn lại tùy thuộc vào ứng dụng của các bạn, dùng cho từng loại cảm biến khác nhau thì chúng ta dùng các hàm đọc và so sánh ngưỡng để làm điều kiện gửi thông báo.

Video kết quả:

Nếu có vấn đề gì trong quá trình làm các bạn có thể comment xuống phía dưới. Và ủng hộ tác giả bằng cách rate hoặc like nhé. Thanks.

Bài viết tham khảo từ nguồn: https://randomnerdtutorials.com

 

Số lượt xem: 2,230
Tags: emailesp8266iotiot webserverphp scriptweb of things

Related Posts

How to connect Raspberry Pico W to a wireless network?

How to connect Raspberry Pico W to a wireless network?

January 4, 2023
46
IoT Webserver- ESP8266/ESP32 gửi dữ liệu lên Cloud, hiển thị ra trình duyệt web với MySQL và PHP

Giám sát nhiệt độ sử dụng cảm biến DS18b20 và ESP8266 hiển thị bằng biểu đồ với Highcharts và MySQL

April 18, 2020
3.6k
Điều khiển PWM ESP8266 từ xa qua internet

Điều khiển PWM ESP8266 từ xa qua internet

December 1, 2019
2.1k

Comments 15

  1. Nghia Nguyen says:
    3 years ago

    api key lấy từ đâu ra bạn ạ

    Reply
    • admin says:
      3 years ago

      api key mình tự đặt bất kì nhé, do mình tự qui định để server xác thực thôi.

      Reply
      • nguyen nghia says:
        3 years ago

        bạn giúp mình ngay bước mà test để được dòng chữ No data posted with HTTP POST..
        của mình hiện ra là: Notice: Undefined index: api_key_esp in /storage/ssd4/025/11331025/public_html/email-notification.php on line 8
        Sai mã API Key
        nếu có thể bạn cho mình xin zalo để mình được học hỏi với ạ. tks bạn nhiều

        Reply
        • admin says:
          3 years ago

          Bạn kiểm tra lại mã nguồn PHP nhé, mình mới cập nhật để khắc phục lỗi rồi, chúc bạn thành công!

          Reply
          • nguyen nghia says:
            3 years ago

            mình đã sửa mã nguồn PHP nhưng mình test nhiều lần với đường link chứa api-key của mình và pin12 thì kết quả vẫn ra giống bước 1. trong mail mình không có gì. ngoài ra mình thử nhảy bước 3 và code mã nguồn cho ESP8266 gửi request đến Webserver. mình dùng IDE thì bị lỗi biến Count, lost và dòng . bạn giúp đỡ mình với nhé, tks bạn. >3

          • nguyen nghia says:
            3 years ago

            dòng này bạn nhé: ( dòng đầu tiên)

  2. admin says:
    3 years ago

    dòng cspan style=”font-family: tahoma, arial, helvetica, sans-serif;font-size: 12pt”c. là khi post bài mình định dạng cỡ font chữ nó tự chèn vào thêm, cái này bạn bỏ nó đi là dc.

    Còn phương án cuối cùng, mình gửi bạn link code php script đang chạy trên host, và code arduino đã check trên phiên bản Arduino IDE 1.8.8 . Bạn tự chạy kiểm tra lại nhé

    code arduino: http://www.mediafire.com/file/vir2im0kr37lbmo/ESP8266_request_email.rar/file
    code php: http://www.mediafire.com/file/a30z47yctoxqd83/email-notification.php/file

    Check:
    url check script php: https://luuvachiase.000webhostapp.com/email-notification.php

    url này sẽ kích hoạt gửi mail cho mình: https://luuvachiase.000webhostapp.com/email-notification.php?api_key_esp=tPmAT5Ab3j7F9&PIN12=0

    Reply
  3. Pingback: IoT PHP Server for ESP8266/ESP32 - Lưu và chia sẻ kiến thức robocon, IoT, Embedded...
  4. Pingback: Điều khiển PWM ESP8266 từ xa qua internet - Lưu và chia sẻ kiến thức robocon, IoT, Embedded...
  5. dtienss says:
    3 years ago

    Dear bạn, rất cám ơn bạn đã hướng dẫn tận tình. Mong có nhiều ý tưởng hay như vậy.

    Reply
  6. Tú Phạm says:
    3 years ago

    hi admin,
    ad cho em hỏi asp_key _esp mình lấy ở đâu vậy ạ.
    em cảm ơn

    Reply
  7. Tú Phạm says:
    3 years ago

    hi admin,
    ad cho em hỏi sao em làm bước đầu mà kích vô link để được như vầy “Xin chào, hãy gửi request của bạn gồm api_key_esp và giá trị Pin 14” mà nó cứ báo là không tìm thấy dữ liệu là sao ạ
    em cảm ơn

    Reply
  8. online cialis pharmacy says:
    2 years ago

    I’ll right away grab your rss as I can not to find your
    e-mail subscription hyperlink or e-newsletter service. Do you’ve any?

    Kindly let me realize so that I may subscribe.
    Thanks.

    Reply
    • admin says:
      2 years ago

      Sorry about that, You can find the subscribe form on the main site. On the top right. Thank you.

      Reply
  9. Nguyễn Khánh Toàn says:
    2 years ago

    Rất hữu ích. Cám ơn Ad rất nhiều.

    Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Bài viết đọc nhiều

IoT Webserver- ESP8266/ESP32 gửi dữ liệu lên Cloud, hiển thị ra trình duyệt web với MySQL và PHP

IoT Webserver- ESP8266/ESP32 gửi dữ liệu lên Cloud, hiển thị ra trình duyệt web với MySQL và PHP

January 30, 2023
16.9k
Điều khiển ESP8266/ESP32 từ xa qua internet, không cần mở Port modem

Điều khiển ESP8266/ESP32 từ xa qua internet, không cần mở Port modem

November 7, 2019
10.1k
ESP32-CAMERA: Cài đặt môi trường Arduino IDE và nạp chương trình

ESP32-CAMERA: Cài đặt môi trường Arduino IDE và nạp chương trình

December 27, 2019
6.9k
IoT webserver- Gửi thông báo bằng email từ ESP8266 không dùng IFTTT

IoT webserver- Gửi thông báo bằng email từ ESP8266 không dùng IFTTT

November 19, 2020
5.5k
Store and share experiences about robocon, IoT, Embedded…

Lưu và chia sẻ những gì đã đọc, đã làm, đã nghiên cứu về vi điều khiển, hệ thống nhúng, internet of things, kiến trúc máy tính và hệ điều hành.

Liên hệ với quản trị viên

Chủ đề

  • Arduino
  • CCNA cơ bản
  • Cisco
  • Điện tử- Robot
  • ESP32
  • FPGA
  • HTTP+MySQL cho IoT
  • IoT Server
  • Jetson Tx1
  • Lập trình nhúng
  • Latex
  • Linux
  • Mạng và thiết bị mạng
  • Raspberry Pi
  • Raspberry Pico
  • RISCV
  • Robocon
  • Web of things
  • Window
  • WordPress

Quản trị trang

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

© 2019- 2023 luuvachiase.net - Phát triển và quản trị bởi Đỗ Ngọc Tuấn và Nguyễn Văn Tuấn ***Vui lòng ghi rõ nguồn khi trích dẫn bài viết từ Website này. DMCA.com Protection Status

No Result
View All Result
  • Trang chủ
  • Linux
  • Window
  • Lập trình nhúng
    • Jetson Tx1
    • Raspberry Pi
  • Web of things
    • HTTP+MySQL cho IoT
    • Websocket+Nodejs
  • Điện tử- Robot
    • Robocon
    • Arduino
    • RISCV
    • FPGA
  • Mạng và thiết bị mạng
    • CCNA cơ bản
  • IoT Server
  • Giới thiệu
  • Q&A (Hỏi đáp)

© 2019- 2023 luuvachiase.net - Phát triển và quản trị bởi Đỗ Ngọc Tuấn và Nguyễn Văn Tuấn ***Vui lòng ghi rõ nguồn khi trích dẫn bài viết từ Website này. DMCA.com Protection Status

Login to your account below

Forgotten Password?

Fill the forms bellow to register

All fields are required. Log In

Retrieve your password

Please enter your username or email address to reset your password.

Log In