Web server với Arduino và ESP8266

16/06/2019
web-server-voi-arduino-va-esp8266

I. Giới thiệu

Ở bài viết trước, mình có hứa sẽ chia sẻ về cách sử dụng các tập lệnh AT để giao tiếp với ESP8266. Và hôm nay, mình sẽ chia sẻ cách tạo websever bằng Arduino và ESP8266  sử dụng tập lệnh AT để giao tiếp giữa 2 board Arduino và ESP8266 nhé. Thử tạo một project nho nhỏ xây dựng web sever để điều khiển led trên pin của arduino thông qua esp8266 thôi nào.

II. Chuẩn bị

  • 1 x Arduino
  • 1 x led
  • 1 x ESP8266

III. Nối dây

Cách nối với led đã qua quen thuộc rồi

Sau đó các bạn kết nối Arduino với ESP8266 như sau:

IV. Code

Bạn hãy xem lại bài viết trước của mình tại đây để nắm được lệnh AT nhé!!!

code được tham khảo tại đây

  1. #include <SoftwareSerial.h>
  2. #define DEBUG true
  3.  
  4. SoftwareSerial esp8266(10, 11); // 10-RX, 11-TX
  5. char x;
  6. void setup() {
  7. Serial.begin(9600);
  8. esp8266.begin(9600); // chu y phai cung toc do voi ESP 8266
  9.  
  10. pinMode(13, OUTPUT); // tuong tu chan 12
  11. digitalWrite(13, LOW);
  12. //========================gui tap lenh AT cho ESP 8266 de cai dat cac tham so cho WiFi================================
  13. guidulieu("AT+RST\r\n", 2000, DEBUG); // reset module
  14. guidulieu("AT+CWMODE=1\r\n", 1000, DEBUG); // Chọn chức năng client cho esp
  15. guidulieu("AT+CWJAP=\"DHT_CODER\",\"arduino\"\r\n", 1000, DEBUG); // Kết nối với wifi
  16. guidulieu("AT+CIFSR\r\n", 1000, DEBUG); // xem ip là bn
  17. guidulieu("AT+CIPMUX=1\r\n", 1000, DEBUG); // configure for multiple connections
  18. guidulieu("AT+CIPSERVER=1,80\r\n", 1000, DEBUG); // Mở cổng 80
  19. }
  20.  
  21. void loop() {
  22. while (esp8266.available()) {
  23. IncomingChar(esp8266.read());
  24. }
  25.  
  26. if (x) {
  27. // Đây là giao diện web page viết dưới dạng html...các bạn có thể dễ dàng edit
  28.  
  29. String html = "<HTML>"
  30. "<HEAD><TITLE>DO_HUU_TOAN_IOT</TITLE>"
  31. "<form action=\"\" method=\"get\">"
  32. "<input type=\"radio\" name=\"LED\" value=\"RED_ON\"> LED_ON"
  33. "<input type=\"radio\" name=\"LED\" value=\"RED_OFF\"> LED_OFF<br>"
  34. "<input type=\"submit\" value=\"Submit\">"
  35. "</form>"
  36. "</BODY></HTML>";
  37.  
  38. String cipsend = "AT+CIPSEND=0,"; //gui chuoi data qua Wifi
  39.  
  40. cipsend += html.length();
  41. cipsend += "\r\n";
  42. guidulieu(cipsend, 1000, DEBUG);
  43. guidulieu(html, 1000, DEBUG);
  44. guidulieu("AT+CIPCLOSE=0\r\n", 1000, DEBUG);
  45. x = 0;
  46. }
  47.  
  48. }
  49.  
  50. void IncomingChar(const byte InChar) {
  51. static char InLine[300]; //Hạn chế ký tự
  52. static unsigned int Position = 0;
  53.  
  54. switch (InChar) {
  55. case '\r': //Cái này là xuống dòng...cho linux
  56. break;
  57.  
  58. case '\n': // xuống dòng cho window...( kết thúc bảng tin )
  59. InLine[Position] = 0;
  60. ProcessCommand(String(InLine));
  61. Position = 0;
  62. break;
  63.  
  64. default:
  65. InLine[Position++] = InChar;
  66.  
  67. }
  68. }
  69.  
  70. void ProcessCommand(String InLine) {
  71. Serial.println("InLine: " + InLine);
  72.  
  73. if (InLine.startsWith("+IPD,")) {
  74.  
  75. x = 1;
  76. }
  77. // lện String.indexOf(kytu)...chả về vị trí của kytu trong chuỗi String...Nếu giá trị trả về là -1...tức là kytu không xuất hiện trong chuỗi String
  78. if (InLine.indexOf("RED_OFF") != -1) {
  79.  
  80. digitalWrite(12, LOW);
  81. digitalWrite(13, LOW);
  82. }
  83.  
  84. if (InLine.indexOf("RED_ON") != -1) {
  85.  
  86. digitalWrite(13, HIGH);
  87. }
  88. }
  89.  
  90. String guidulieu(String lenh,
  91. const int thoigian, boolean debug) {
  92. String chuoigiatri = "";
  93.  
  94. esp8266.print(lenh); // send the read character to the esp8266
  95.  
  96. long int time = millis();
  97.  
  98. while ((time + thoigian) > millis()) {
  99. while (esp8266.available()) {
  100.  
  101. // The esp has data so display its output to the serial window
  102. char c = esp8266.read(); // read the next character.
  103. chuoigiatri += c;
  104. }
  105. }
  106.  
  107. if (debug) {
  108. Serial.print(chuoigiatri);
  109. }
  110.  
  111. return chuoigiatri;
  112. }
Bình luận (1)
binh-luan

An An

16/06/2019

anh ơi webserver a để trực tiếp trên esp hay trên máy tính của anh vậy
VIẾT BÌNH LUẬN CỦA BẠN