II. Bài học mẫu ứng dụng lập trình esp8266:
7. Đọc giá trị cảm biến nhiệt độ LM35 và gửi lên thingspeak
Cảm biến nhiệt độ LM35 là một loại cảm biến tương tự rất hay được ứng dụng trong các ứng dụng đo nhiệt độ thời gian thực ( nhưng vẫn còn sai số lớn) . Với kích thước nhỏ và giá thành rẻ là một trong những ưu điểm của nó. Vì đây là cảm biến tương tự (analog sensor) nên ta có thể dễ dàng đọc được giá trị của nó bằng hàm analogRead().
Nhiệt độ được xác định bằng cách đo hiệu điện thế ngõ ra của LM35. → Đơn vị nhiệt độ: °C.
→ Nhiệt độ thay đổi tuyến tính: 10mV/°C
Độ chính xác thực tế: 1/4°C ở nhiệt độ phòng và 3/4°C ngoài khoảng 2°C tới 150°C công suất tiêu thụ là 60uA.
Cảm biến LM35 hoạt động bằng cách cho ra một giá trị hiệu điện thế nhất định tại chân Vout (chân giữa) ứng với mỗi mức nhiệt độ.
Chuẩn bị phần cứng:
1 x ESP8266 V12 hoặc V12E đã tích hợp sẵn mạch nạp ( Trong ví bài viết này tôi sử dụng ESP8266-V12E)
1 breadboard.
1 cảm biến nhiệt độ LM35.
Phần mềm :
Phần mềm Arduino IDE.
Đăng kí 1 tài thoản miễn phí trên thingspeak.
Cài đặt trên thingspeak:
sau khi đăng kí một tài khoản miễn phí ta được giao diện như sau và ta chọn New Channel
Và ta được giao diện như hình sau:
Lắp mạch:
Lập trình:
#include <ESP8266WiFi.h>
String apiWritekey = "VXMLHG2R6DDPUCNT"; // mã Writekey ta thay vào đây const char* ssid = "coffee "; // tên wifi nhà bạn
const char* password = "coffee" ;// wifi pasword
const char* server = "api.thingspeak.com";
float resolution=3.3/1023; // 3.3 is the supply volt & 1023 is max analog read value WiFiClient client; void setup() { Serial.begin(115200); WiFi.disconnect(); delay(10); WiFi.begin(ssid, password); 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.print("NodeMcu connected to wifi..."); Serial.println(ssid); Serial.println(); } ESP8266_12E LM35 3.3 VCC ( 5V) GND GND (--) A0 OUT
void loop() {
float temp = (analogRead(A0) * resolution) * 100;
if (client.connect(server,80)) {
String tsData = apiWritekey; tsData +="&field1="; tsData += String(temp); tsData += "\r\n\r\n"; client.print("POST /update HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Connection: close\n"); client.print("X-THINGSPEAKAPIKEY: "+apiWritekey+"\n"); client.print("Content-Type: application/x-www-form-urlencoded\n"); client.print("Content-Length: "); client.print(tsData.length());
client.print("\n\n"); // the 2 carriage returns indicate closing of Header fields & starting of data
client.print(tsData);
Serial.print("Temperature: "); Serial.print(temp);
Serial.println("uploaded to Thingspeak server...."); }
client.stop();
Serial.println("Waiting to upload next reading..."); Serial.println();
// thingspeak needs minimum 15 sec delay between updates delay(15000);
}
và được kết quả như sau