Thứ Ba, 7 tháng 2, 2017

Hướng dẫn và code mẫu điều khiển 1 led qua wifi (tạo một webserver với ESP8266 module Wemos D1

Chào các bạn, như đã hứa ở những bài viết trước, ở bài viết này mình sẽ tập hợp đầy đủ các bước các mà các bạn cần thực hiện để có thể tạo một web server với module ESP 8266. Hơn thế nữa, ở bài viết này, mình cũng sẽ cung cấp code mẫu và video giải thích code mẫu một cách chi tiết để các bạn không những có thể làm được, mà còn có thể hiểu vấn đề một cách tối đa.

Tư vấn mua arduino cho người mới bắt đầu
Internet of things

Xem thêm Top 5 khóa học không thể bỏ qua trước tuổi 18


Bước 1: Mua linh kiện
Để thực hành bất kỳ một vấn đề gì liên quan tới điện tử tự động, các bạn đều cần chuẩn bị kỹ linh kiện và các thiết bị phụ trợ có chất lượng tốt (trừ trường hợp các bạn mô phỏng bằng phần mềm). Đối với các hướng dẫn về Iot (Internet of things). Linh kiện mình ưa thích sử dụng là ESP 8266 Wemos D1.  Thiết bị này là một sản phẩm con lai giữa dòng chip wifi ESP 8266 huyền thoại với gia đình Arduino. Để tìm kiến thiết bị này hay các sản phẩm liên quan, các bạn có thể tìm kiếm tại website linhkienrobotics.com. Đây là website uy tín chuyên cung cấp các thiết bị điện, điện tử, liên quan tới robotics và điều khiển tự động.

Bước 2: Thiết lập môi trường, thư viện
Wemos D1 không tự nhiên cắm vào máy tính là được nhận và có thể lập trình được ngay. Các bạn cần phải thiết lập thư viện và môi trường cho nó. Hướng dẫn này tương đối dài dòng nên mình đã tích hợp hướng dẫn trong video dưới đây.


Nhớ xem kỹ video này trước khi thiết lập môi trường nhé



Sau khi setup môi trường xong thì chúng ta có thể bắt đầu phần thực hành điều khiển một led bằng việc kết nối qua mạng wifi nhà mình.

Hướng dẫn chi tiết các bạn xem tại video này nhé



Nếu các bạn chưa tìm được code mẫu cho điều khiển 1 led qua wifi thì các bạn có thể copy code mẫu ở dưới này nhé.

/*
 *  This sketch demonstrates how to set up a simple HTTP-like server.
 *  The server will set a GPIO pin depending on the request
 *    http://server_ip/gpio/0 will set the GPIO2 low,
 *    http://server_ip/gpio/1 will set the GPIO2 high
 *  server_ip is the IP address of the ESP8266 module, will be 
 *  printed to Serial when the module is connected.
 */

#include <ESP8266WiFi.h>

const char* ssid = "your-ssid";
const char* password = "your-password";

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);

  // prepare GPIO2
  pinMode(2, OUTPUT);
  digitalWrite(2, 0);
  
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
  
  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  
  // Match the request
  int val;
  if (req.indexOf("/gpio/0") != -1)
    val = 0;
  else if (req.indexOf("/gpio/1") != -1)
    val = 1;
  else {
    Serial.println("invalid request");
    client.stop();
    return;
  }

  // Set GPIO2 according to the request
  digitalWrite(2, val);
  
  client.flush();

  // Prepare the response
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ";
  s += (val)?"high":"low";
  s += "</html>\n";

  // Send the response to the client
  client.print(s);
  delay(1);
  Serial.println("Client disonnected");

  // The client will actually be disconnected 
  // when the function returns and 'client' object is detroyed
}


Với bài viết và code mẫu này. Hi vọng các bạn đã bước đầu có thể thực hiện các bài tập, ví dụ về Iot. Chúc các bạn làm robot thật vui và có nhiều phát minh sáng chế trong tương lai.