ESP8266-12e-part3: Hướng dẫn đăng kí server, viết code điều khiển qua internet

Sử dụng Server điều khiển ESP8266 qua internet

Chào các bạn, sau một thời gian xây dựng thử nghiệm Server điều khiển thiết bị qua Internet bằng ESP8266, hôm nay ad làm hướng dẫn để các bạn có thể sử dụng Server này và mạch ESP8266 của mình điều khiển qua Internet.

Do đây là phiên bản thử nghiệm free nên ad không chịu trách nhiệm về bất cứ điều gì liên quan đến hệ thống của các bạn khi các bạn dùng Server của Eclub.

Đầu tiên là các bạn phải đọc và làm qua bài hướng dẫn về Arduino IDE và ESP8266-12e mà ad đã hướng dẫn trước đây, kể cả việc nạp code cho mạch.

Sang đến phần này, ad không giải thích chi tiết cụ thể, mà để các bạn tự lấy code để tham khảo, ad chỉ nói những điểm cần lưu ý trong project này, do điều kiện thời gian nên các bạn thông cảm.

Sau đây chúng ta đi vào thực hành làm project này:

Bước 1: Đăng kí tài khoản để có thể sử dụng server của Eclub, điều khiển ESP của mình thông qua Internet.

- Các bạn vào trang của CLB: eclub-tcu.com, trong mục IoT, các bạn chọn IoT-server

 

- Tiếp theo các bạn chọn đăng kí tài khoản

.

 

- Tiến hành đăng kí các thông tin cần thiết, ( lưu ý là các bạn cố gắng chọn usernam đặc biệt để không trùng với người khác, và cả địa chỉ email nữa vì nó liên quan đến phần server gửi trả data về cho ESP.)

- Sau khi đăng kí thành công, sẽ có dòng “click login” để đăng nhập ( hơi nhỏ xíu, ad sẽ điều chỉnh lại).

- Sau khi các bạn đăng nhập vào thành công, thì giao diện điều khiển gồm 3 thiết bị sẽ hiện ra, ad đã đơn giản hết mức có thể để khi chúng ta dùng Smart phone thì giao diện điều khiển vẫn dùng được và không bị rối, thời gian tới sẽ bổ sung giao diện trên trình duyệt của Smart phone.

- Mặc định khi khởi tạo, cả 3 thiết bị sẽ ở trạng thái tắt, sau khi chúng ta click on/off thì trạng thái thiết bị sẽ được lưu đến các phiên đăng nhập tiếp theo. Các bạn có thể điều khiển và login-> logout thử.

- Đến đây là xong phần giao diện điều khiển rồi, vì mới phát triển nên tính năng thêm bớt thiết bị ad chưa cập nhật được, nên tạm thời để mặc định là 3 thiết bị. Nhưng đừng lo nếu bạn dùng ESP8266-01 bạn hoàn toàn có thể điều khiển nó, chỉ cần sửa lại code của ESP 1 chút là ok.

  Bước 2: Tiến hành code và nạp code.

- Trong phần đầu của code, thì cơ bản là các khai báo thông thường, các bạn làm với ESP và Arduino nhiều thì đã quá quen thuộc rồi. Những bạn mới làm thì có thể xem chú thích bên phải dòng lệnh.

#include <ESP8266WiFi.h>  // chúng ta bắt buộc phải có những thư viện này

#include <ArduinoJson.h> // chúng ta bắt buộc phải có những thư viện này

const char* ssid     ="DHQG2-1"; //"your-SSID";   // tên wifi internet nhà bạn

const char* password =""; //"your-password";  // mật khẩu wifi

const char* host     = "esp8266.eclub-tcu.com";  // server trung gian cho đkhiển

String path          = "/test/tuansqtt.json";//your-username.json";  /* tên user đã đăng kí trên trang esp8266.eclub-tcu.com*/

 

char count=0,lost=2,err=0; // khai báo phục vụ đếm lỗi

void setup() {  

  pinMode(14, OUTPUT); // settup control PIN 14  /* các chân muốn điều khiển, phụ thuộc vào ESP, nếu là ESP-01 thì các bạn xem sơ đồ chân và thay số.*/

  pinMode(13, OUTPUT); // settup control PIN 13

  pinMode(12, OUTPUT); // settup control PIN 12, can control more pins...

 

  Serial.begin(115200); // debug ra serial monitor

 

  delay(10);

  // connect to your network

  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");  // connect ok

Đến đây là chúng ta đã kết nối thành công vào mạng wifi.

Các dòng code tiếp theo là để chúng ta kết nối đến Server.

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;

Tiếp theo là phần gửi yêu cầu lên server.

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;

  Serial.print("SEND GET...with number of errors: "); 

  Serial.println(err,DEC);    // number of errors              

  client.print(String("GET ") + path + " HTTP/1.1 " +

               "Host: " + host + " " +

               "Connection: keep-alive ");

 

  delay(500); // wait for server to respond

 

    // read response

  String section="header";

  while(client.available()){

    String line = client.readStringUntil(' ');

  

     count++;

Phần này là phần xử lý data nhận về từ Server, nếu như bạn nào chưa có nhiều kinh nghiệm lập trình thì chỗ này không nên làm gì cả.

if (section=="header")

    {

      Serial.print(".");

      if (line==" ")

      {

        section="json";

      }

    }

    else if (section=="json")

    { 

      section="ignore";

      String result = line.substring(1);

      int size = result.length() + 1;

      char json[size];

      result.toCharArray(json, size);

      StaticJsonBuffer<200> jsonBuffer;

      JsonObject& json_parsed = jsonBuffer.parseObject(json);

     

      if (!json_parsed.success())

      {

        Serial.println("Can't read state!!!");

        return;

      }

Tiếp theo là phần điều khiển trạng thái của led, cũng như output của chân điều khiển thiết bị.

Serial.println("State of leds:");

      // Make the decision to turn off or on the LED

     

      //===========================================

      if (strcmp(json_parsed["led1"], "on") == 0)

          {

        digitalWrite(12,HIGH);

        Serial.println("LED1 ON");

          }

      else

          {

        digitalWrite(12,LOW);

        Serial.println("LED1 OFF");

          }

      //============================================

     if (strcmp(json_parsed["led2"], "on") == 0)

        {

        digitalWrite(13,HIGH);

        Serial.println("LED2 ON");

        }

      else

        {

        digitalWrite(13,LOW);

        Serial.println("LED2 OFF");  

        }

     //=============================================

      if (strcmp(json_parsed["led3"], "on") == 0)

        {

        digitalWrite(14,HIGH);

        Serial.println("LED3 ON");

        }

      else

        {

        digitalWrite(14,LOW);

        Serial.println("LED3 OFF");  

        }

Trên đây là tất cả code cần thiết cho ESP của bạn, bây giờ chúng ta tiến hành nạp code vào ESP và thực hành điều khiển thử nhé.

Khuyên khích các bạn sử dụng Serial monitor cho việc quan sát hoạt động của ESP.

Nếu kết nối đến Server thành công thì chúng ta sẽ thấy các dòng debug in ra như dưới đây.

Trong trường hợp nếu bị gián đoạn kết nối đến internet thì ESP sẽ tự động thiết lập lại đường kết nối.

Code project các bạn down tại đây: ESP

Mọi thắc mắc các bạn comment bên dưới.

Số lượt xem bài viết: 3605



Trung Kiên 01-11-2016 11:01:20

Bạn ơi thêm thư viện ArduinoJson.h vào như nào nhỉ

Admin 04-11-2016 04:00:30

Bạn đọc bài viết này nhé, trong đó mình có hướng dẫn thêm thư viện json. http://eclub-tcu.com/60/ESP-v12-part1--Lap-trinh-voi-Arduino-IDE.html

Trung Kiên 03-12-2016 07:31:29

Bạn ơi cho mình hỏi là giờ mình muốn điều khiển ở khoảnh cách xa hơn, không dùng chung trong 1 mạng wifi thì phải làm như nào. Mình truy cập vào internet ở 1 nơi khác mà vẫn điều khiển được ESP8266

Admin 05-12-2016 02:23:42

Có lẽ bạn chưa đọc kĩ bài mình viết rồi, mục đích của bài viết này là để điều khiển ở bất cứ đâu, miễn là có Internet, thậm chí bằng 3G.

Admin 05-12-2016 15:02:01

Được bạn nhé, nhưng thực sự là chưa có time vì nó cũng liên quan nhiều thứ như Php, MySQL, còn việc gửi nhận dữ liệu thì chủ yếu sử dụng phương thức GET, POST của HTTP thôi, phải có time mình mới trình bày kĩ lưỡng được, :D

namduong 05-12-2016 12:59:14

ban co thể hướng dẫn m tạo ra môt web server riêng được k. với lại cách truyền dữ liệu ở đây là như thế nào. ban có thể nói rõ hơn không

namduong 06-12-2016 05:02:49

ok. thanks cho m hoi thêm là web này bạn tạo bằng wordpress hay dùng php tự code vậy.

namduong 06-12-2016 15:55:55

m làm được rồi. nhưng cho m hoi khi mình nhấn off thì bóng đèn trên webserver tắt rồi nhưng đèn trên board mạch phải một lúc sau mới tắt, nguyên nhân la gì vậy và minh muốn khi bóng trên webserver tắt thì bóng trên board phải tắt ngay thì phải làm thế nào..

Admin 07-12-2016 09:58:26

Việc trễ đó là do ESP gửi GET lên Server và chờ Respone thôi, bạn sửa tham số trong code của ESP là sẽ nhanh lên, nhưng vấn đề là nên để trễ một chút cũng không sao, bạn cho thời gian ngắn quá thì việc đáp ứng của server là ko kịp đâu, vì ngoài của bạn ra thì còn nhiều người khác cũng đang thử server, bạn hiểu ý mình chứ. Còn server này mình tự code bằng PHP.

Thuận 20-12-2016 16:08:45

anh có thể hướng dẫn e tạo một web sever riêng được không

admin 27-12-2016 16:31:45

Mình thứ nhất là chưa có thời gian, thứ 2 là server chưa hoàn thiện nên mình chưa làm huowwgs dẫn được :D, bạn thông cảm nhé

Quốc 12-01-2017 10:08:56

Bạn ơi sao mình nạp code thành công, user và passwod kết nối với mạng wifi cũng thành công, nhưng không biết sai chổ nào trong monitor nó báo :connecting to esp8266.eclub-tcu.com SEND GET...with number of errors: 4 - Là sai gì?

aubaoquoc 12-01-2017 13:04:21

- Chào admin, Mình làm chạy thành công rồi, bạn có thể share đoạn code phía server, mình học hỏi. Phia Server là code php lưu vào database hay chỉ thuần html? - email: baoquoc_siemens@yahoo.com

VŨ VIÊN 16-01-2017 04:02:25

thư viện ArduinoJson.h để làm gì vậy anh ?

Admin 19-01-2017 13:15:38

Hii, cái nummber of errors đó là số lần Client không get data được từ Server thôi bạn nhé.

Admin 19-01-2017 13:18:14

VŨ VIÊN, ArduinoJson.h là để sử dung các hàm phân tích data nhận được từ Server.

dzauto 18-02-2017 06:56:28

bạn có thể share đoạn code phía server, mình học hỏi. gmail: vanthuan96.hx@gmail.com

thainlh 25-07-2017 09:59:50

bạn ad có thể share cho mình code phía server và cách tạo 1 server riêng đc không.mail mình là thainlh@gmail.com.cảm ơn bạn nhiều

namduong 31-07-2017 03:06:02

ban co thể cho mình xem nội dung file.Json dược không. thanks so much

Admin 31-07-2017 08:54:26

Đây là cấu trúc file json nhé: {"led2":"off","led3":"off","led1":"off"} ĐỒng thời cũng xin lỗi các bạn đang có nhu cầu về code phía Server, do mình còn đang nhiều việc quá, chưa thể đưa Project lên, với lại Host của mình đang bị lỗi, ko FTP được, mong các bạn thông cảm.

admin 07-10-2017 09:08:39

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Comment
Name
Message
Coppy right ©: 2016 by Đỗ Ngọc Tuấn-TCU
Email: ngoctuansqtt@gmail.com