CÔNG VIỆC CỦA CHÚNG TÔI

+ Đào tạo & hỗ trợ thi & Cấp chứng chỉ Ứng dụng CNTT cơ bản, nâng cao
+ Cung cấp dịch vụ Thiết kế - Lập trình web
+ Các giải pháp triển khai - quản trị hệ thống mạng doanh nghiệp
+ ĐÀO TẠO CHUYÊN NGHIỆP: LẬP TRÌNH (C, .Net, ASP.net, PHP, Thiết kế Đồ họa
ESP8266 cho người mới vỡ lòng

ESP8266 cho người mới vỡ lòng

SP8266 là một  dòng chip tích hợp Wi-Fi 2.4Ghz có thể lập trình được, không biết có bạn nào thắc mắc là modem wifi ở nhà nó hoạt động thế nào, cách thức ra làm sao không nhỉ ? Nếu bạn cũng đang tìm hiểu cũng như muốn điều khiển một cái gì đó từ xa thì đây là một modul thích hợp cho bạn làm điều đó. Vậy chúng ta sẽ thử tìm hiểu qua về cách sử dụng nó như thế nào nhé.

Giới thiệu các phiên bản ESP8266

Hiện tại thì đã có tới 14 phiên bản của ESP8266, quá nhiều sự lựa chọn cho chúng ta. Nhưng vì ở Việt Nam không phải lúc nào cũng có đủ tất cả nên mình sẽ giới thiệu 2 phiên bản ESP8266 phổ biến hiện nay

ESP-01

esp8266-v1

Tính năng

  • Mạch nhỏ, gọn (24.75mm x 14.5mm)
  • Điện áp làm việc 3.3v
  • Tích hợp sẳn anten PCB trace trên module
  • Có hai led báo hiệu : led nguồn, led TXD
  • Có các chế độ: AP, STA, AT + STA
  • Lệnh AT rất đơn giản, dễ dàng sử dụng
  • Khoảng cách giữa các chân 2.54mm

Sơ đồ chân

esp8266_esp-01_pinouts

ESP-12

esp-12

Tính năng

  • Sử dụng nguồn 3.3v
  • Tích hợp anten PCB trace trên module
  • Tiêu chuẩn wifi : 802.11b/g/n, với tần số 2.4GHz và hổ trợ bảo mật WPA/WPA2
  • Khoảng cách giữa các chân 2mm

Sơ đồ chân

esp12-pinout

2 bản này có cái PCB màu xanh, có cái PCB màu đen, nói chung là màu khác thôi chứ chân cẳng hoàn toàn giống nhau nên các bạn yên tâm nhé.
Nếu bạn có các phiên bản ESP8266 khác thì có thể vào esp8266.vn để tham khảo thêm

Chuẩn bị và kết nối

Đầu tiên là bước chuẩn bị đồ dùng để bắt đầu cho quá trình ngâm cứu, chúng ta cần có 3 thứ
  • Modul ESP8266 phiên bản v1 hoặc v12
  • Modul USB2UART (ở đây mình dùng modul PL2303)
  • Modul nguồn 3.3V (bạn có thể lấy nguồn từ PL2303 nhưng nên xài nguồn riêng cho ổn định do dòng của ESP tiêu thụ hơi lớn)
  • Một số dây cắm
Vậy là đã đầy đủ đồ nghề, giờ bắt đầu kết nối thôi, các bạn lưu ý khi mua mấy cái modul này thì bảo người bán test hàng cho mình trước, nếu có đồ sẵn ở nhà rồi thì đảm bảo các modul UART với nguồn còn hoạt động tốt nha. Quan trọng nhất là đừng cắm lộn nguồn – + là được rồi.
Đây là sơ đồ kết nối minh họa cho 2 phiên bản ESP8266 v1 và v12
Kết nối với ESP8266v1
esp-01-ftdi_bb1-620x537
Kết nối với ESP8266v12

esp8266-esp-12-module-connect

Cấu hình

Việc kết nối đã xong, giờ chúng ta bắt đầu kiểm tra coi modul hoạt động thế nào
Đầu tiên là tải phần mềm terminal, có nhiều loại phần mềm và tùy vào phong cách cũng như sở thích của từng người, nếu mới dùng modul thì mình khuyên dùng phần mềm sscom
Đây là màn hình của phần mềm, phiên bản của các bạn Tàu khựa nhưng các bạn yên tâm không phải lo lắng về ngôn ngữ nhé.
Lưu ý: Khi kết nối gõ lệnh AT dùng SSCOM không hiển thị gì thì cách khắc phục là bạn cần ngắt kết nối GPIO0 với GND.
sscom42
Mình xin nói qua về cách sử dụng một chút
  • Số 1 là lựa chọn cổng COM và tốc độ baud, cổng COM ở đây là COM khi bạn cắm modul UART vào nhé (ở đây nó tự detect cổng COM cho bạn), về tốc độ baud thì ESP8266 có 2 tốc độ là 9600115200, nếu không được cái này thì bạn thử với cái kia. Xong thì ấn vào nút kết nối được khoanh ngay bên cạnh nhé.
  • Số 2 là thông báo khi bắt đầu khởi động modul, nếu hiện thông báo này thì coi như bước giao tiếp đã thành công, không được thì bạn đổi lại baud xem thế nào. Mình xin nói thêm ở đây là cái chữ invalid làm mình khốn khổ thế nào, ban đầu cứ tưởng modul bị ra đi rồi nhưng không phải, vẫn hoạt động bình thường, mình kiểm tra mấy modul rồi thì có mỗi modul này bị như thế, các modul khác thì ra valid nha các bạn.
  • Số 3 là tick chọn để gửi lệnh AT thì mới có phản hồi về, nó tương ứng với \r\n (cái này chắc mình sẽ nói sau nhé).
  • Tiếp tục dòng chữ AT ở vị trí số 4 sau đó ấn nút số 5
  • Quan sát kết quả ở vị trí số 6, nếu hiện OK là modul hoạt động tốt rồi

Kết nối vào mạng wifi

Đầu tiên dùng lệnh AT+RST  để thực hiện reset lại modul, tiếp theo là thực hiện tuần tự theo các bước như bảng bên dưới, tạm thời mình chỉ đưa ra 1 số lệnh cơ bản và mô tả để các bạn có thể kết nối được vào wifi nhà mình thôi.
Lệnh ATMô tảThông sốThao tác thực hiệnKết quả trả về
AT+CWMODE ="mode"Cài đặt chế độ1 = Station
2 = Access Point
3 = Both
Gõ AT+CWMODE=3OK
AT+CIPMUX ="mode"Cài đặt số lượng các kênh kết nối0 = 1 kênh kết nối
1 = Nhiều kênh kết nối
Gõ AT+CIPMUX=1OK
AT+CWLAPTìm Wifi
Gõ AT+CWLAPDanh sách các mạng wifi sẵn có
AT+CWJAP = "ssid", "password"Kết nối với mạng wifi nhà mình
Gõ AT+CWJAP="tên mạng nhà bạn","mật khẩu"WIFI CONNECTED
WIFI G OT IP
OK
AT+CIFSRXem địa chỉ IP của module
Gõ AT+CIFSR+CIFSR:APIP,"192.168.4.1"
+CI P:APMAC,"xx:xx:xx:xx:xx:xx"
+CIFSR:STAIP,"192.168.1.100"
+CIFSR:STAMAC,"xx:xx:xx:xx:xx:xx"

OK

Kết

Thế là bước đầu bạn đã có thể kết nối được modul ESP8266, kiểm tra được modul sống hay chết, làm quen được với phần mềm và cách gõ lệnh AT để kết nối vào mạng wifi nhà mình. Tất nhiên chỉ là làm quen, còn nhiều thứ chờ đợi bạn ở phía trước, ví như dùng ESP để làm một căn nhà thông minh đơn giản, hoặc các kết nối với vi điều khiển khác, các cấu hình lập trình cao siêu hơn, MQTT, FOTA, smart config với ESP8266… bạn có thể tham khảo thêm ở esp8266.vn và trong các bài hướng dẫn tiếp theo của mình.
Cập nhật firmware AT cho ESP8266

Cập nhật firmware AT cho ESP8266

Có rất nhiều phiên bản firmware khác nhau cho ESP8266, tuy nhiên firmware sử dụng AT command là được sử dụng khá phổ biến hiện nay với các modul ESP8266 có trên thị trường. Nếu trong quá trình lập trình cho ESP8266 bạn có xóa hết firmware cũ sau đó lại muốn nạp lại thì mình xin hướng dẫn cho các một cách dễ dàng trong bài viết này.

Các phiên bản firmware AT command

  • Bản Offical từ Espressif, bản này chỉ sử dụng được cho các modul ESP8266 có bộ nhớ flash lớn, thường là từ v12 trở lên, được phát triển bởi Espressif.
  • Bản của ai-thinker, bản này phù hợp với mọi phiên bản ESP8266, thường được dùng với ESP8266v1 dung lượng flash nhỏ.

Chuẩn bị công cụ

  • Modul ESP8266 và mạch USB2UART PL2303 hoặc NodeMCU, ở đây mình dùng ESP8266v1 và PL2303
  • Nguồn 3v3 cho ESP8266.
  • Tool Flash ESP8266.
  • File firmware blank và firmware ai-thinker.
Tất cả đồ nghề flash có thể tải tại  ESP8266 Tool

Kết nối phần cứng

  • Với NodeMCU thì quá đơn giản, chỉ cần cắm nguồn qua cổng USB là có thể flash được rồi.
  • Với ESP8266v1 thì cần kết nối chân như sau
esp8266-pinout_top
ESP8266PL2303Nguồn 3.3VGhi chú
VCCxVCCNối VCC của ESP với nguồn 3V3
GNDGNDGNDNối chung GND của ESP,PL2303 và GND của nguồn 3V3
RSTxxKhi ESP bị treo hoặc không nạp được thì nối với GND sau đó ngắt kết nối
CH_PDxVCCNối với 3V3 cho phép kích hoạt phát wifi
TXDRXDxNối ESP với PL2303 để giao tiếp nạp firmware
RXDTXDxNối ESP với PL2303 để giao tiếp nạp firmware
GPIO0GNDGNDNối xuống GND để có thể update được firmware
GPIO2xx

Flash firmware

  • Mở phần mềm ESP8266Flasher, chọn cổng COM
flash_esp8266_com_connect
  • Cấu hình chọn mục Config, sau đó chọn đường dẫn file flash blank_1MB.bin, địa chỉ lần lượt là 0x000000, 0x100000, 0x200000 and 0x300000, trở về thẻ Operation, ấn flash để xóa sạch sẽ firmware cũ
flash_esp8266_com_earase_all
Lưu ý 1: Chân GPIO0 phải được nối với GND trước khi flash. Nếu thấy thanh trượt bắt đầu chạy nghĩa là đã flash được, còn không có thì bạn phải reset lại ESP8266 bằng cách nối chân RST với GND sau đó thả ra và ấn nút flash lại.
Lưu ý 2: nếu bạn chưa sử dụng nhiều bộ nhớ flash của ESP8266 thì có thể bỏ qua bước xóa sạch sẽ firmware.
flash_esp8266_com_begin_flashl
  • Thêm firmware mới, ở đây phần địa chỉ ta giữ nguyên là 0x000000 và có 2 firmware cho bạn lựa chọn
    • ai-thinker-0.9.5.2-9600.bin – Tốc độ baud rate mặc định là 9600
    • ai-thinker-0.9.5.2-115200.bin – T Tốc độ baud rate mặc định là 115200 (mình sử dụng bản này)
flash_esp8266_com_ai-thinker
Sau khi nạp hoàn thành thì phần mềm tự ngắt kết nối với ESP8266, bạn thực hiện reset lại và kiểm tra hoạt động bình thường thôi, bạn có thể xem thêm ở phần Log để biết quá trình flash đã tới đâu, có lỗi lầm gì không.
flash_esp8266_log

Tạm kết

 xong phần nạp firmware AT Command cho các loại ESP8266, việc còn lại là kiểm tra hoạt động của nó như thế nào, bạn có thể xem thêm cách kiểm tra lệnh AT của ESP8266.

How to Send Data from Arduino to Webpage using WiFi

How to Send Data from Arduino to Webpage using WiFiHow to Send Data from Arduino to Webpage using WiFi
Wireless communication between Electronic devices and modules is very important, to make them ‘Fit’ in the World of Internet of Things. HTTP protocol and HTML language have made it possible to transfer the Data anywhere in the world, over the web. We have already covered some projects which use Wi-Fi with Arduino, have a look at them to Getting started :
Now in this tutorial, we are building a program to Send Data to Web using Arduino and Wi-Fi module. For this we first need an IP address of either Global or Local server, here for the ease and demonstration purpose, we are using Local Server.

Components Required:

  • Arduino UNO
  • ESP8266 Wi-Fi Module
  • USB Cable
  • Connecting wires
  • Laptop   
  • Power supply
Wi-Fi Module ESP8266:
ESP8266 Wi-Fi module

Circuit Connections:

Circuit Diagram for “Post Data from Arduino to Web” is given below. We mainly need a Arduino and ESP8266 Wi-Fi module. ESP8266’s Vcc and GND pins are directly connected to 3.3V and GND of Arduino and CH_PD is also connected with 3.3V. Tx and Rx pins of ESP8266 are directly connected to pin 2 and 3 of Arduino. Software Serial Library is used to allow serial communication on pin 2 and 3 of Arduino. We have already covered the Interfacing of ESP8266 Wi-Fi module to Arduino in detail.
 Send data from arduino to webpage Circuit Diagram
By using Software Serial Library here, we have allowed serial communication on pin 2 and 3, and made them Rx and Tx respectively. By default Pin 0 and 1 of Arduino are used for serial communication but by using SoftwareSerial library, we can allow serial communication on other digital pins of the Arduino.
Note: To watch the response of ESP8266 on serial monitor, please open Serial Monitor of Arduino IDE.

Working Explanation:

First of all we need to connect our Wi-Fi module to Wi-Fi router for network connectivity. Then we will Configure the local server, Send the data to Web and finally Close the connection. This process and commands have been explained in below steps:
1. First we need to test the Wi-Fi module by sending AT command, it will revert back a response containing OK.
2. After this, we need to select mode using command AT+CWMODE=mode_id , we have used Mode id =3. Mode ids:
             1 = Station mode (client)
             2 = AP mode (host)
             3 = AP + Station mode (Yes, ESP8266 has a dual mode!)
3. Now we need to disconnect our Wi-Fi module from the previously connected Wi-Fi network, by using the command AT+CWQAP, as ESP8266 is default auto connected with any previously available Wi-Fi network
4. After that, user can Reset the module with AT+RST command. This step is optional.
5. Now we need to connect ESP8266 to Wi-Fi router using given command
             AT+CWJAP=”wifi_username”,”wifi_password”
6. Now get IP Address by using given command:
            AT+CIFSR
            It will return an IP Address.
7. Now enable the multiplex mode by using AT+CIPMUX=1 (1 for multiple connection and 0 for single connection)
8. Now configure ESP8266 as server by using AT+CIPSERVER=1,port_no (port may be 80). Now your Wi-Fi is ready. Here ‘1’ is used to create the server and ‘0’ to delete the server.
9. Now by using given command user can send data to local created server:
           AT+CIPSEND =id, length of data
            Id = ID no. of transmit connection
           Length = Max length of data is 2 kb
10. After sending ID and Length to the server, we need to send data like : Serial.println(“circuitdigest@gmail.com”);
11. After sending data we need close the connection by given command:
          AT+CIPCLOSE=0
          Now data has been transmitted to local server.
12. Now type IP Address in Address Bar in web browser and hit enter. Now user can see transmitted data on webpage.
Check the Video below for complete process.

Steps for Programming:

1. Include SoftwareSerial Library for allow serial communication on PIN 2 & 3 and declare some variables and strings.
#include<SoftwareSerial.h>
SoftwareSerial client(2,3); //RX, TX

String webpage="";
int i=0,k=0;
String readString;
int x=0;

boolean No_IP=false;
String IP="";
char temp1='0';

2. After this, we have to define some functions for performing our desired tasks.
In Setup() function, we initialise inbuilt serial UART communication for ESP8266 as client.begin(9600); at the baud rate of 9600.
void setup() 
{
   Serial.begin(9600);
   client.begin(9600);
   wifi_init();
   Serial.println("System Ready..");
}

3. In wifi_init() function, we initialize the wifi module by sending some commands like reset, set mode, connect to router, configure connection etc. These commands have also been explained above in description part.
void wifi_init()
{
      connect_wifi("AT",100);
      connect_wifi("AT+CWMODE=3",100);
      connect_wifi("AT+CWQAP",100);  
      connect_wifi("AT+RST",5000);
      ...... .....
      ..... .....

4. In connect_wifi() function, we send commands data to ESP8266 and then read response from ESP8266 Wi-Fi module.
void connect_wifi(String cmd, int t)
{
  int temp=0,i=0;
  while(1)
  {
    Serial.println(cmd);
    ...... .....
    ..... .....

5. sendwebdata( ) function is used for sending data to Local Server or Webpage.
void sendwebdata(String webPage)
{
    int ii=0;
     while(1)
     {
      unsigned int l=webPage.length();
      Serial.print("AT+CIPSEND=0,");
      client.print("AT+CIPSEND=0,");
      ...... .....
      ..... .....

6. void send() function is used for sending data strings to sendwebdata() function. That will be further sent to webpage.
void Send()
{
      webpage = "<h1>Welcome to Circuit Digest</h1><body bgcolor=f0f0f0>";
      sendwebdata(webpage);
      webpage=name;
      webpage+=dat;
      ...... .....
      ..... .....

7. get_ip() function is used for getting IP address of Local created server.

8. In void loop() function, we send instruction to user for refreshing the page and check whether the server is connected of not. When user refresh or request the webpage, data automatically transmitted to the same IP address.
void loop() 
{
  k=0;
  Serial.println("Please Refresh your Page");
  while(k<1000)
  .... .....
  .... .....

We can display any data from Arduino to Webpage using this process, like Room Temperature & HumidityClock timeGPS coordinatesHeart beat Rate etc. 
Code: 
#include<SoftwareSerial.h>
SoftwareSerial client(2,3); //RX, TX
String webpage="";
int i=0,k=0;
String readString;
int x=0;
boolean No_IP=false;
String IP="";
char temp1='0';
String name="<p>Circuit Digest</p>";   //22
String dat="<p>Data Received Successfully.....</p>";     //21
     
void check4IP(int t1)
{
  int t2=millis();
  while(t2+t1>millis())
  {
    while(client.available()>0)
    {
      if(client.find("WIFI GOT IP"))
      {
        No_IP=true;
      }
    }
  }
}
void get_ip()
{
  IP="";
  char ch=0;
  while(1)
  {
    client.println("AT+CIFSR");
    while(client.available()>0)
    {
      if(client.find("STAIP,"))
      {
        delay(1000);
        Serial.print("IP Address:");
        while(client.available()>0)
        {
          ch=client.read();
          if(ch=='+')
          break;
          IP+=ch;
        }
      }
      if(ch=='+')
      break;
    }
    if(ch=='+')
    break;
    delay(1000);
  }
  Serial.print(IP);
  Serial.print("Port:");
  Serial.println(80);
}
void connect_wifi(String cmd, int t)
{
  int temp=0,i=0;
  while(1)
  {
    Serial.println(cmd);
    client.println(cmd); 
    while(client.available())
    {
      if(client.find("OK"))
      i=8;
    }
    delay(t);
    if(i>5)
    break;
    i++;
  }
  if(i==8)
  Serial.println("OK");
  else
  Serial.println("Error");
}
void wifi_init()
{
      connect_wifi("AT",100);
      connect_wifi("AT+CWMODE=3",100);
      connect_wifi("AT+CWQAP",100);  
      connect_wifi("AT+RST",5000);
      check4IP(5000);
      if(!No_IP)
      {
        Serial.println("Connecting Wifi....");
        connect_wifi("AT+CWJAP=\"1st floor\",\"muda1884\"",7000);         //provide your WiFi username and password here
     // connect_wifi("AT+CWJAP=\"vpn address\",\"wireless network\"",7000);
      }
      else
        {
        }
      Serial.println("Wifi Connected"); 
      get_ip();
      connect_wifi("AT+CIPMUX=1",100);
      connect_wifi("AT+CIPSERVER=1,80",100);
}
void sendwebdata(String webPage)
{
    int ii=0;
     while(1)
     {
      unsigned int l=webPage.length();
      Serial.print("AT+CIPSEND=0,");
      client.print("AT+CIPSEND=0,");
      Serial.println(l+2);
      client.println(l+2);
      delay(100);
      Serial.println(webPage);
      client.println(webPage);
      while(client.available())
      {
        //Serial.print(Serial.read());
        if(client.find("OK"))
        {
          ii=11;
          break;
        }
      }
      if(ii==11)
      break;
      delay(100);
     }
}
void setup() 
{
   Serial.begin(9600);
   client.begin(9600);
   wifi_init();
   Serial.println("System Ready..");
}
void loop() 
{
  k=0;
  Serial.println("Please Refresh your Page");
  while(k<1000)
  {
    k++;
   while(client.available())
   {
    if(client.find("0,CONNECT"))
    {
      Serial.println("Start Printing");
      Send();
      Serial.println("Done Printing");
      delay(1000);
    }
  }
  delay(1);
 }
}
void Send()
{
      webpage = "<h1>Welcome to Circuit Digest</h1><body bgcolor=f0f0f0>";
      sendwebdata(webpage);
      webpage=name;
      webpage+=dat;
      sendwebdata(webpage);
      delay(1000);
     webpage = "<a href="http://circuitdigest.com/";
     webpage+="\">Click Here for More projects</a>";
     sendwebdata(webpage);
     client.println("AT+CIPCLOSE=0"); 
}
Video: 
CircuitDigest highly recommends EasyEDA for Circuit Design and PCB Prototype
A SIMPLE IOT PROJECT WITH THE ESP8266 WIFI MODULE

A SIMPLE IOT PROJECT WITH THE ESP8266 WIFI MODULE

A SIMPLE IOT PROJECT WITH THE ESP8266 WIFI MODULE

ESP8266 v01


NOTE

This is one of my older ESP8266 articles. Please check out my more recent ESP8266 projects below:


THE ESP8266 WIFI MODULE

The ESP8266 is a WiFi module that costs less than 5 USD. This makes putting your sensors on the net actually feasible. (Hooking up the $75 Arduino Yun to each of your sensors - not no feasible.) There’s a lot of excitement about this sensor on the Internet currently, and people have done an amazing job deciphering the obscure command structure of this device that comes from China. There seems to be three ways of using this module, in order of increasing complexity:
  1. Sending it AT commands from a computer via an USB to serial adapter. This is mostly useful for testing and setup.
  2. Interfacing with an Arduino or any other microcontoller and using this board as a peripheral.
  3. Programming the module directly and use its GPIO pins to talk to your sensors, eliminating the need for a second controller.
I’ve explored options #1 and #2 above, and that’s what I’ll be talking about here. If you are new to this whole thing, I recommend that you watch this video from Great Scott Labs first.

SETTING UP THE ESP8266

The first thing you want to do with ESP8266 (as with any aliens) is to establish communication. For this, you hook up a USB to TTL adapter to the module, and talk to it using a serial port terminal application like CoolTerm. One thing to be careful about when you hook up this module is to remember that this module operates at 3.3 V - even the serial lines should not exceed this voltage. So here is how I hooked up my ESP8266:


ESP8266 circuit
In the above circuit, you can see that I used a 3.3 V regulator to power the board, and a resistor dividor on the RX line to keep the voltages on spec. The sessions below use CoolTerm. My board worked with a baud rate of 9600, since its firmware was already upgraded to 0.9.2.2. You may need to try other baud rates - 115200, for instance.
þ<.—Ž.þ...‡,‡.(Š–Š‹‡.‡....û.‡.ÿ
[System Ready, Vendor:www.ai-thinker.com]
Now, you can send it AT commands. You can see the full command reference here. First let’s send “AT”:
AT


OK
Now let’s get the firmware version:
AT+GMR

0018000902

OK
Now, let’s get the operation mode.
AT+CWMODE?

+CWMODE:3

OK
3 implies that we are in Standalone + Access Point mode. That’s fine. Now, let’s do something fun. Let’s list all the available WiFi access points.
AT+CWLAP

+CWLAP:(0,"Cisco15010-guest",-84,"ce:d7:19:0b:80:19",1)
+CWLAP:(4,"TRENDnet",-86,"c8:d7:19:0b:80:19",1)
+CWLAP:(2,"ASingh",-87,"00:25:5e:c5:d1:88",1)
+CWLAP:(4,"HMMA",-66,"80:ea:96:f1:27:7a",11)
+CWLAP:(4,"dlink-30B8",-91,"c8:d3:a3:6e:30:b8",6)
+CWLAP:(4,"Deepak Mullick",-93,"80:a1:d7:77:a1:e4",6)
+CWLAP:(1,"MGMNT",-91,"80:a1:d7:77:a1:e5",6)
+CWLAP:(3,"rajat_linksys",-67,"20:aa:4b:31:43:9d",6)
+CWLAP:(2,"smk385",-89,"00:1f:33:bc:02:f6",6)
+CWLAP:(4,"Apoorv",-91,"ec:1a:59:17:53:93",7)
+CWLAP:(3,"AkhIshir",-88,"08:60:6e:cb:63:b0",11)
+CWLAP:(2,"sunil",-77,"94:d7:23:f5:fc:34",9)
+CWLAP:(1,"MGMNT",-77,"94:d7:23:f5:fc:35",9)
+CWLAP:(1,"Tanu",-92,"00:1d:7e:1e:68:4e",11)

OK
Now let’s connect to my WiFi network.
AT+CWJAP="HMMA","NOTTELLINGMYPASSWD"


OK
Now, let’s check if we actually got an IP address:
AT+CIFSR

192.168.4.1
192.168.4.10

OK
Whoohoo! We are on the network. We’ll actually make use of the Internet in the next section. Also, the above settings are now actually stored in the module. Even if you power it on and off, it will connect automatically to this network.
At this point, you can upgrade the firmware if you want. I used this Python script. You can read about the process at theelectrodragon web page.

LM35 TEMPERATURE PLOT USING AN ARDUINO

Now that we have put the module on the network, let’s make use of it by creating a small IoT (Internet of Things) device. I had written a previous post on plotting sensor data on ThingSpeak. This time, I’ll use an LM35 temperature sensor. I’ll talk to the ESP8266 using an Arduino Mini Pro clone. Here’s what the LM35 looks like:


LM35
In the code below, I use the SoftwareSerial library to talk to the ESP8266. I use the hardware Serial for debugging. (You could try the opposite.) I also assume that the ESP8266 is already setup to connect to the WiFi network.
// esp8266_test.ino
//
// Plot LM35 data on thingspeak.com using an Arduino and an ESP8266 WiFi
// module.
//
// Author: Mahesh Venkitachalam
// Website: electronut.in

#include <SoftwareSerial.h>
#include <stdlib.h>

// LED
int ledPin = 13;
// LM35 analog input
int lm35Pin = 0;

// replace with your channel's thingspeak API key
String apiKey = "T2RJXWQAVXG4ZV39";

// connect 10 to TX of Serial USB
// connect 11 to RX of serial USB
SoftwareSerial ser(10, 11); // RX, TX

// this runs once
void setup() {                
  // initialize the digital pin as an output.
  pinMode(ledPin, OUTPUT);    

  // enable debug serial
  Serial.begin(9600);
  // enable software serial
  ser.begin(9600);

  // reset ESP8266
  ser.println("AT+RST");
}


// the loop
void loop() {

  // blink LED on board
  digitalWrite(ledPin, HIGH);   
  delay(200);               
  digitalWrite(ledPin, LOW);

  // read the value from LM35.
  // read 10 values for averaging.
  int val = 0;
  for(int i = 0; i < 10; i++) {
      val += analogRead(lm35Pin);   
      delay(500);
  }

  // convert to temp:
  // temp value is in 0-1023 range
  // LM35 outputs 10mV/degree C. ie, 1 Volt => 100 degrees C
  // So Temp = (avg_val/1023)*5 Volts * 100 degrees/Volt
  float temp = val*50.0f/1023.0f;

  // convert to string
  char buf[16];
  String strTemp = dtostrf(temp, 4, 1, buf);

  Serial.println(strTemp);

  // TCP connection
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += "184.106.153.149"; // api.thingspeak.com
  cmd += "\",80";
  ser.println(cmd);

  if(ser.find("Error")){
    Serial.println("AT+CIPSTART error");
    return;
  }

  // prepare GET string
  String getStr = "GET /update?api_key=";
  getStr += apiKey;
  getStr +="&field1=";
  getStr += String(strTemp);
  getStr += "\r\n\r\n";

  // send data length
  cmd = "AT+CIPSEND=";
  cmd += String(getStr.length());
  ser.println(cmd);

  if(ser.find(">")){
    ser.print(getStr);
  }
  else{
    ser.println("AT+CIPCLOSE");
    // alert user
    Serial.println("AT+CIPCLOSE");
  }

  // thingspeak needs 15 sec delay between updates
  delay(16000);  
}
In the code above, I read the analog pin, compute the temperature, and send that information to a ThingSpeak channel via a GET request.
Here is how the circuit is hooked up. I am using a cheap Arduino Pro Mini clone for this experiment, and the battery is a rechargeable one meant for charging cell phones.


ESP8266 Arduino LM35