Dùng ESP8266 gửi dữ liệu cảm biến AM2315 qua giao thức HTTPS với data kiểu Json

esp8266 and am2315 post json data json

Hôm nay, tôi sẽ giới thiệu với các bạn cách dùng ESP8266 gửi dữ liệu cảm biến AM2315 (cảm biến nhiệt độ và độ ẩm) qua giao thức HTTPS với data kiểu Json.

Có thể một số đọc giả đã thực hiện vấn đề này rồi, bài viết này tôi chia sẻ cho những bạn mới tìm hiểu. Nếu bài viết có hay hãy chia sẻ cho người đang cần.

Quy trình thực hiện:

Bước 1: Cấm dây kết nối cảm biến ESP8266 với cảm biến AM2315.

Cảm biến AM2315 có 4 dây, các bạn cấm tương ứng với các màu như sau:

- Màu đỏ: cấm vào chân 5V (VCC).

- Màu đen: cấm vào chân GND.

- Màu trắng: cấm vào chân SCL.

- Màu vàng: cấm vào chân SDA.

Bước 2: Lập trình nạp code cho ESP8266.

Trong đoạn code sau mình đã lập trình mẫu sẵn và ghi chú đầy đủ các bước khai báo thư viện, khởi tạo biến và các hàm xử lý dữ liệu thành Json.

Các bạn chỉ cần lưu ý một vấn đề. Để kết nối với giao thức HTTPS bạn cần cấp khóa SHA-1.

Để lấy khóa SHA-1 các bạn vào trình duyệt thực hiện theo các bước như hình sau:

chon xem them thong tin chung chiChọn xem thêm thông tin bảo mật

chon xem chung chiChọn xem thông tin chứng chỉ SSL

lay khoa sha1Lấy thông tin SHA-1

Mỗi tên miền sẽ có chứng chỉ SSL khác nhau nên SHA-1 cũng khác nhau và các bạn lưu ý cập nhật SHA-1 khi chứng chỉ hết hạn được thay thế một chứng chỉ khác.

Các bạn cũng có thể đọc dữ liệu từ một link khác lấy và gán biến số cho SHA-1 để thay đổi tùy ý mà không cần nạp code lại.

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
#include <Adafruit_AM2315.h>
#include <Wire.h>
#include <ArduinoJson.h>
#include <WiFiClientSecureBearSSL.h>
char ssid[] = "WiFi"; //Tên WiFi
char pass[] = "*******"; //Mật khẩu WiFi
unsigned long interval = 300000; //Cài đặt tham số thời gian lấy và gửi dữ liệu - đơn vị tính millis
unsigned long previousMillis = 0; //Cài đặt tham số mốc thời gian bắt đầu.

Adafruit_AM2315 am2315;
ESP8266WiFiMulti WiFiMulti;

void setup() {
	Serial.begin(9600);  
	WiFi.mode(WIFI_STA);
	WiFiMulti.addAP(ssid, pass);
	if (! am2315.begin()) {
		Serial.println("Sensor not found, check wiring & pullups!");
		while (1);
	}  
	Serial.println("Setup ok");
}

void loop() {
	unsigned long currentMillis = millis(); //Lấy mốc thời gian hiện tại
	//Kiểm tra thời gian bắt đầu board hoạt động đến hiện tại cho phép lấy và gửi dữ liệu
	if ((unsigned long)(currentMillis - previousMillis) >= interval)
	{
		previousMillis = currentMillis; //Gán lại mốc thời gian bắt đầu
		float temperature, humidity; //Khai báo tham số đo nhiệt độ và độ ẩm
		//Thực hiện đọc dữ liệu liệu đo nhiệt độ và độ ẩm
		if (! am2315.readTemperatureAndHumidity(&temperature, &humidity)) {
			Serial.println("Failed to read data from AM2315");
			return;
		}
		//Kiểm tra kết nối mạng WiFi
		if ((WiFiMulti.run() == WL_CONNECTED)) {  
			HTTPClient https;
			String link = "https://agitech.com.vn";
			//Tạo dữ liệu kiểu Json cho nhiệt độ và độ ẩm
			DynamicJsonDocument root(1024);
			root["nhietdo"] = temperature;
			root["doam"] = humidity;
			char json_str[100];
			serializeJsonPretty(root, json_str);
			//Kết thúc tạo Json kết quả sẽ như {"nhietdo": 30, "doam": 76}
			
			//Kết nối truy cập https với khóa SHA-1
			if(https.begin(link,"B6:EE:32:4E:28:89:8D:9A:76:D1:B7:6E:5C:D5:F6:4C:0A:7C:1D:73"))
			{
				https.addHeader("Content-Type", "application/json"); //Set header Content-Type kiểu Json
				int getlink = https.POST(json_str); //Gửi giữ liệu
				if (getlink > 0)
				{
					//Thực hiện gửi thành công và lấy dữ liệu trả về
					Serial.printf("[HTTPS] GET... code: %d\n", getlink);
					if (getlink == HTTP_CODE_OK || getlink == HTTP_CODE_MOVED_PERMANENTLY) {
						String payload = https.getString();
						Serial.println(payload);
					}
				}
				else
				{
					//Thực hiện gửi thất bại và thông báo lỗi kết nối
					Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(getlink).c_str());
				}
				https.end(); //Ngắt kết nối
			}else {
				//Lỗi kết nối https
				Serial.printf("[HTTPS] Unable to connect\n");
			}
		}
	}
}

Chúc các bạn thành công!

Ngụy Kim Hưng

Các công cụ cần cho IOT trong dự báo thời tiết

I. Hệ thống đo thời tiết (tốc độ gió, hướng gió, lượng mưa, nhiệt độ, áp suất)

1.      Board SM Mega 328P:

ATmega328 là vi điều khiển trong board mạch Arduino

ATmega328 có tên đầy đủ là ATmega328P-PU. ATmega328 là linh hồn của board mạch Arduino, sức mạnh phần cứng mà Arduino Uno có được là từ đây.

Các vi điều khiển ATmega328 đều được ghi sẵn bootloader Arduino

Bootloader Arduino cho phép bạn gửi mã chương trình cho ATmega328 thông qua giao thức Serial (dùng cổng COM) mà không yêu cầu bạn phải có 1 bộ nạp ROM đặc biệt nào cả.

Các thông số chính của vi điều khiển Atmega328P-PU như sau:

+ Kiến trúc: AVR 8bit

+ Xung nhịp lớn nhất: 20Mhz

+ Bộ nhớ chương trình (FLASH): 32KB

+ Bộ nhớ EEPROM: 1KB

+ Bộ nhớ RAM: 2KB

+ Điện áp hoạt động rộng: 1.8V - 5.5V

+ Số timer: 3 timer gồm 2 timer 8-bit và 1 timer 16-bit

+ Số kênh xung PWM: 6 kênh (1timer 2 kênh)

2.Cảm biến đo tốc độ gió: Máy đo tốc độ gió là một công cụ theo dõi thời tiết được sử dụng để đo tốc độ gió. Các máy đo tốc độ gió thô đầu tiên được sử dụng để đo tốc độ gió hàng trăm năm trước, nhưng hiện nay máy đo tốc độ gió là những màn hình tốc độ gió chính xác cao có thể cung cấp dữ liệu theo nhiều cách khác nhau.

*Tính năng:

– Kích thước nhỏ, vật liệu hợp kim nhôm, độ bền cao.

– Ngoại hình  tinh tế, độ chính xác cao

– Khả năng chống nhiễu cho khoảng cách truyền xa

– Tiêu thụ điện năng thấp, Phạm vi rộng, thông tin dữ liệu tốt

– Dễ lắp đặt, dễ mang theo.

Thông số kỹ thuật Cảm biến đo tốc độ gió môi trường.

– Nguồn cấp: 220VAC.

– Phạm vi đo: 0.8~60m/s.

– Độ chính xác: 0.1 m/s

– Dây cáp: 5 mét (có thể dài hơn – tùy chọn) – PVC.

– IP: 65.

– Nhiệt độ: -30-60 độ.

– Môi trường: Chống ẩm, muối, bụi cao (sử dụng tốt cho tàu biển)

Thông số kỹ thuật cảm biến đo tốc độ gió trong đường ống.

– Nguồn cấp: 24VDC/AC ±20%.

– Phạm vi: 0-10m/s; 0-15m/s; 0-20m/s, 0-30m/s lựa chọn qua nút nhấn

– Ngõ ra: 4-20mA hoặc 0-10VDC

– Nhiệt độ hoạt động: -25-50 độ C.

– Độ chính xác: ±2m/s.

– Thời gian đáp ứng: 0.2 giây

– Cáp: 1 mét.

3.Cảmbiến đo hướng gió: Cảm biến hướng gió, Cảm biến đo hướng gió, đo hướng gió, tốc độ gió, cảm biến đo hướng gió môi trường, đo chiều gió trạm thời tiết, tàu thuyền trên biển.

*Chức năng: giúp chúng ta biết được hướng gió thổi chiều nào. Đặc biệt là trên tàu biển, thuyền buồm, cẩu trục trên cao. Ngày xưa khi chưa có điện thì người ta xem hướng gió ngay tại bộ đo hướng gió, có thể hiện sẵn các hướng Đông – Tây – Nam – Bắc ngay trên thiết bị.

Thông Số Kỹ Thuật:

·         Điện áp hoạt động: 3.5 ~ 5.5V.

·         Dòng điện tối đa khi sử dụng: 10mA.

·         Đọc độ ẩm từ 0-100% sai số 2%.

·         Nhiệt độ: -20 ~ 80 độC sai số 0.1độC.

·         Kích thước: đường kính 16mm, dài 98mm.

·         4 dây tín hiệu dài 20 inch

·         Khối lượng: 82.64g

·         Địa chỉ I2C: 05C.

·         Xin lưu ý chỉ sử dụng cảm biến trong môi trường độ ẩm thuần là hơi nước, các môi trường đặc biệt ủ kín như ủ tỏi đen, ủ yếm khí...sẽ sinh ra nấm và vi khuẩn bám lên bề mặt cảm biến làm hư hỏng cảm biến.

*Chức năng:Cảm Biến Độ Ẩm Nhiệt Độ AM2315 được sử dụng để đo nhiệt độ và độ ẩm với chuẩn giao tiếp I2C rất dễ dàng để kết nối và giao tiếp với Vi điều khiển, cảm biến có thiết kế chuyên nghiệp, chất lượng linh kiện và gia công tốt, độ bền cao.

5. Cảm biến đo nhiệt độ, độ ẩm đất SHT30 Cảm biến SHT30 là bản nâng cấp vượt trội của SHT10 (hiện đã ngưng sản xuất) từ hãng Sensirion với độ bền chuẩn công nghiệp, độ chính xác và độ ổn định cao.

-Chức năng: sử dụng trong nông nghiệp với các ứng dụng cần độ bền, độ chính xác và độ ổn định cao, cảm biến có cấu tạo gồm cảm biến SHT30 phía trong, bên ngoài là lớp vỏ bảo vệ cảm biến khỏi các tác động vật lý từ môi trường như bụi, nước,....tuy nhiên vẫn đo được chính xác độ ẩm và nhiệt độ.

- sử dụng trong môi trường đất, tức là bạn có thể chôn cảm biến dưới đất để đo các thông số độ ẩm nhiệt độ của đất, tuy nhiên các bạn cần lưu ý để chôn cảm biến ở khoảng cách hợp lý để không dẫn đến tình trạng nước ngập úng tràn vào làm hư cảm biến.

Thông số kỹ thuật:

·         Cảm biến độ ẩm, nhiệt độ đất SHT30 có vỏ bảo vệ V4

·         Cảm biến phía trong: SHT30

·         Điện áp sử dụng: 2.15~5.5VDC

·         Khoảng nhiệt độ đo được: -40 ~ 125 độ C, sai số 0.2 độ C

·         Khoảng độ ẩm đo được: 0 ~100% RH, sai số 2% RH.

·         Có sẵn trở treo 10K và tụ lọc nhiễu.

·         Độ dài cảm biến: 44mm

·         Độ dài dây dẫn: 50cm

6. Cảm biến đo áp suất

  • Cảm biến áp suất là thiết bị điện tử chuyển đổi tín hiệu áp suất sang tín hiệu điện, thường được dùng để đo áp suất hoặc các ứng dụng có liên quan đến áp suất.

Nguyên lý hoạt động :

  • Nguyên lý hoạt động cảm biến áp suất cũng gần giống như các loại cảm biến khác là cần nguồn tác động (nguồn áp suất, nguồn nhiệt,… nguồn cần đo của cảm biến loại đó) tác động lên cảm biến, cảm biến đưa giá trị về vi xử lý, vi xử lý tín hiệu rồi đưa tín hiệu ra. Sơ đồ khối cảm biến áp suất Sơ đồ khối cảm biến áp suất Áp suất: ngồn áp suất cần kiểm tra có thể là áp suất khí, hơi, chất lỏng …

Cấu tạo gồm 2 phần chính:

  • Cảm biến: là bộ phận nhận tín hiệu từ áp suất và truyền tín hiệu về khối xử lý. Tùy thuộc vào loại cảm biến mà nó chuyển từ tín hiệu cơ của áp suất sang dạng tín hiệu điện trở, điện dung, điện cảm, dòng điện … về khối xử lý.
  • Khối xử lý: có chức năng nhận các tính hiệu từ khối cảm biến thực hiện các xử lý để chuyển đổi các tín hiệu đó sang dạng tín hiệu tiêu chuẩn trong lĩnh vực đo áp suất như tín hiệu ngõ ra điện áp 4 ~ 20 mA( tín hiệu thường được sử dụng nhất) , 0 ~ 5 VDC, 0 ~ 10 VDC, 1 ~ 5 VDC
  • Tùy vào từng loại cảm biến là cách thức hoạt động cũng khác nhau , có loại hoạt động dựa trên sự biến dạng vật liệu để làm sự thay đổi điện trở, loại thì thay đổi điện dung, loại thì sử dụng vật liệu áp điện, trong đó dạng áp điện trở và kiểu điện dung là được sử dụng nhiều nhất.
  •  .

*Chứcnăng:Cảm biến áp suất dùng để đo trong hệ thống lò hơi , thường được đo trực tiếp trên lò hơi . Khu vực này cần đo chính xác khá cao & phải chịu nhiệt độ cao .

-Các máy nên khí cũng cần phải đo áp suất để giới hạn áp suất đầu ra , tránh trường hợp quá áp dẩn đến hư hỏng & cháy nổ .

      -Trên các trạm bơm nước cũng cần cảm biến áp suất để giám sát áp suất đưa về PLC hoặc biến        tần để điều khiển bơm nước .

-Để điều áp hoặc điều khiển áp suất sau van điều khiển thì cảm biến áp suất đóng vai trò rất quan trọng vì sẽ ảnh hưởng trực tiếp áp suất đầu ra sau van điều khiển .

-Trên các xe cẩu thường có các ben thuỷ lực , yêu cầu giám sát các ben thuỷ lực này rất quan trọng vì sẽ ảnh hưởng đến lực kéo của ben . Vì thế họ luôn lắp cảm biến áp suất để giám sát áp suất trên các ben thuỷ lực này

Những lưu ý khi sử dụng cảm biến áp suất

Sử dụng cảm biến áp suất mà không biết những thông số của cảm biến áp suất sẽ dẩn đến giảm độ bền cũng như hư hỏng sau một thời gian ngắn sử dụng. Chúng ta nên biết các yếu tố ảnh hưởng tới tuổi thọ của cảm biến áp suất.

a.Quá áp của cảm biến áp suất

Bất kỳ một cảm biến áp suất nào cũng có giới hạn chịu quá áp. Thông thường khả năng quá áp là gấp 2 lần thang đo của cảm biến áp suấtChúng ta chú ý tới 2 thông số : Pressure và Max Pressure

·         Pressure : chính là thang đo của cảm biến áp suất . VD : 0-10 bar

·         Max pressure : đây chính là khả năng chịu quá áp của cảm biến áp suất . Tại 0-10bar thì khả năng chịu quá áp chính là 20 bar

Như vậy với áp suất 190 bar thì khả năng quá áp của cảm biến áp suất SR1 của Georgin chịu được 200% tương đương gấp 2 lần so với thang đo của cảm biến áp suất.

Chúng ta lưu ý rằng áp suất chịu được tối đa là không cố định cho từng thang đo hoặc từng hãng sản xuất. Tại thang đo 0-1 bar thì áp suất chịu quá áp là 5 bar tức gấp 5 lần so với dải đo áp suất. Tuy nhiên, tại thang đo áp suất 0-600 bar thì khả năng chịu quá áp chỉ 800 bar tương đương với 200 bar quá áp.

b.Sai số của cảm biến áp suất

Sai số và tín hiệu ngõ ra của cảm biến áp suất FKP được ghi rõ trong tài liệu

Các cảm biến loại thường sẽ có sai số <1% hoặc 0.5% tuy nhiên đối với các cảm biến áp suất có độ chính xác cao thì sai số sẽ là 0.125% hoặc 0.1% như cảm biến áp suất FKP.

Sai số ảnh hưởng rất lớn đến tín hiệu đưa về của cảm biến áp suất. Ví dụ : cảm biến áp suất 0-10bar có sai số 1% thì tại 10bar giá trị sai số là 100mbar~0.1 bar

Sử dụng cảm biến áp suất nước để điều khiển bơm là một trong các ứng dụng được dùng phổ biến nhất do đơn giản , luôn giữ được áp suất theo yêu cầu .

c.Môi trường sử dụng cảm biến áp suất

Điều quan trọng nhất của việc chọn cảm biến áp suất chính là sử dụng đúng môi trường sử dụng của cảm biến áp suất. Bởi một số loại cảm biến áp suất chỉ sử dụng được trong môi trường đo áp suất không khí mà không thể sử dụng trong môi trường nước hoặc các môi trường khác.

Các môi trường hoá chất có tính làm ăn mòn phải chọn loại cảm biến áp suất phù hợp. Vật liệu màng cảm biến với tiêu chuẩn Inox 316L vẫn bị ăn mòn bởi các hoá chất như acid ( axit ) hoặc môi trường nước thải.

Cần tư vấn về cảm biến áp suất và các vấn đề liên quan cam bien ap suat hãy liên hệ trực tiếp với tôi để được tư vấn. Chúng tôi mong rằng sẽ giúp cho mọi người chọn đúng loại cảm biến áp suất cần dùng.

7. Cảm biến đo lượng mưa:

Với thiết kế đơn giản gồm: một lá chắn để nhận biết có mưa hoặc có nước xuất hiện tên bề mặt của lá chắn và phần module chuyển đổi tín hiệu giúp giao tiếp với các board mạch vi điều khiển, lẫn led báo hiệu để nhận biết trạng thái trên lá chắn.

Cảm biến hổ trợ hai loại ngõ ra tín hiệu là analog (tương tự) và digital (số), để có thể áp dụng linh hoạt tùy mục đích khác nhau.

Thông số kỹ thuật:

·                     Điện áp: 3V - 5V

·                     Ngõ ra:

·                     DO: dạng digital - TTL có khả năng điều khiển trực tiếp Relay, Buzzer, …

·                     AO: dạng analog

·                     Có LED báo hiệu khi có mưa hoặc nước trên bề mặc lá chắn

·                     Độ nhạy có thể được điều chỉnh thông qua chiết áp

·                     Kích thước module chuyển đổi: 3.2cm x 1.4cm

·                     Lá chắn sử dụng vật liệu chất lượng cao FR-04 hai mặt, bề mặt mạ niken, chống oxy hóa

·                     Kích thước là chắn: 5.0cm x 4.0cm

8.  Hộp đựng thiết bị (loại lớn):

·         Hộp đựng dụng cụ, đồ nghề size lớn

·         Sản phẩm dùng chứa đựng những đồ dùng sửa chữa như búa, kìm, cờ lê…rất tiện dụng và có thể mang xách dễ dàng. Sản phẩm làm bằng chất liệu nhựa PP cứng, rất nhẹ để di chuyển. Khóa nhựa và tay xách góp phần hỗ trợ bạn khi muốn di chuyển thùng.

·         Hộp giúp bạn sắp xếp gọn gàng, ngăn nắp, và hạn chế bị trầy xước hay gỉ sét những vật dụng kỹ thuật.

·         Kích thước hộp 43.5 x 23.5 x 19.5 cmlà sản phẩm chính hãng của Hiệp Thành Plastic

·         - Thiết kế 2 tầng tiện lợi (có thể tháo rời) với nhiều ngăn nhỏ giúp phân chia dụng cụ dễ dàng

·         -Cấu tạo khóa cài chắc chắn

·         - Tay xách thuận lợi giúp bạn di chuyển dễ dàng hơn

·         - Sản phẩm đa năng, có thể đựng nhiều đồ dùng trong gia đình như: dụng cụ sửa xe, dụng cụ sửa nhà...

9. Mạch Giảm Áp DC LM2596 x 8: là module giảm áp có khả năng điều chỉnh được dòng ra đến 3A. LM2596 là IC nguồn tích hợp đầy đủ bên trong. Tức là khi cấp nguồn 9v vào module, sau khi giảm áp ta có thể lấp được nguồn 3A < 9v...như 5V hay 3.3V. Thật tuyệt vời đúng không?

Thông số kỹ thuật

  • Module nguồn không sử dụng cách ly
  • Nguồn đầu vào từ 4V - 35V.
  • Nguồn đầu ra: 1V - 30V.
  • Dòng ra Max: 3A
  • Kích thước mạch: 53mm x 26mm
  • Đầu vào: INPUT +, INPUT-
  • Đầu ra: OUTPUT+, OUTPUT-

10.Trụ ống: Dùng trong các cơ cấu nguyển động với con lăn V-slot, con lăn nhựa, gá động cơ trong máy cnc và máy in 3D(Máy in 3d sky (khổ in 300*300*400), Máy in 3d delta k200 dual heads) các cơ cấu truyền động.

*Thông số kỹ thuật :

- Đường kính ngoài(OD): 10 mm

- Đường kính trong(ID): 5.1 mm

- Chiều dài: 6mm, 63.5mm(1/4 inh), 9mm, 40mm

II.Hệ thống xử lý trung tâm (gắn chung với hệ thống thời tiết)

  1. 1Module GSM/GPRS SIM-900A

Sim900A là một thiết bị GSM/GPRS (nó cũng được gọi là một module sim900A) với thiết kế nhỏ gọn được ứng dụng rộng rãi trong ngành điện  tử.

Sim 900A hoạt động ở 2 tần số: GSM EGSM : 900 MHz; DCS: 1800 MHz như là một thiết bị đầu cuối với chíp xử lý 1 lõi công suất mạnh mẽ, tăng cường các tính năng quan trọng trong nền vi xử lý ARM926EJ-S.

Ứng dụng :

Module GSM/GPRS Sim900A là một module GSM/GPRS hỗ trợ người dùng có thể khai thác được tính năng của SIM900a .

       2.Sim 3G/4G (thời hạn 3 năm)

– Bạn muốn sử dụng mạng internet không dây với tốc độ cao – Có ngay sim 4g viettel

– Bạn muốn tiết kiệm chi phí hóa đơn đắt đỏ của mạng dây ADSL – Sim 3g viettel sẽ giúp bạn

– Bạn muốn xem phim online, chơi game online, lướt Facebook, lướt web, đọc tin tức ngay trên chiếc Smart phone của mình – sim3g viettel sẽ làm được tất cả

         3.Bình Ắc quy Globe WP20-12 (12V - 20Ah) khô

* Ứng dụng

  • Hệ thống UPS (hệ thống nguồn không ngắt quăng )
  • Hệ thống thông tin liên lạc
  • Hệ thống đóng ngắt, trạm điện 110 và 220KV
  • Hệ thống báo và chữa cháy, camera
  • Hệ thống  dự phòng nguồn y tế và thiết bị y tế.
  • Hệ thống  dự phòng chiếu sáng cho tàu biển, hàng không, đường sắt.
  • Hệ thống dự phòng  văn phòng và gia đ́ình.
  • Hệ thống dự phòng dữ liệu máy tính.
  • Hệ thống điện năng lượng mặt trời.
  • Hệ thống hiếu sáng khẩn cấp
  • Thiết bị kiểm tra cầm tay
  • 4.Pin năng lượng mặt trời 50W mono:

    Pin mặt trời hay pin quang điện có tên tiếng Anh là Solar panel, nó bao gồm nhiều tế bào quang điện (gọi là solar cells). Tế bào quang điện này là các phần tử bán dẫn có chứa trên bề mặt nhiều các cảm biến của ánh sáng là đi ốt quang, nó làm biến đổi năng lượng của ánh sáng thành năng lượng điện.

    Các chỉ số Cường độ dòng điện, hiệu điện thế hay điện trở của tấm pin thay đổi phụ thuộc vào lượng ánh sáng chiếu lên chúng. Các tế bào quang điện này được ghép lại thành một khối để trở thành pin mặt trời (thông thường sẽ từ 60 hoặc 72 tế bào quang điện trên một tấm pin).

    *Chức năng:

    Tạo ra nguồn năng lượng xanh:

    Ánh sáng mặt trời được xem là nguồn năng lượng tự nhiên và khá quen thuộc. Thông qua tấm pin mà nguồn năng lượng tự nhiên này được chuyển hóa thành điện năng để phục vụ cho đời sống của con người. Làm giảm phần nào gánh nặng cho lưới điện của quốc gia luôn trong tình hình quá tải, giúp khắc phục tình trạng thiếu điện cho nhu cầu sản xuất và sinh hoạt, không bị gián đoạn trong quá trình sử dụng.

    Tiết kiệm

    Giá của các tấm pin mặt trời khá rẻ, đi kèm là chi phí để lắp đặt các hệ thống cho các hộ gia đình, công ty, nhà xưởng…vừa phải. Với vốn đầu tư thấp nhưng hiệu quả sử dụng mang lại rất lớn giúp giảm thiểu chi phí từ hệ thống lắp đặt, không phải bảo trì bảo dưỡng, độ bền lên đến hơn 25 -30 năm, giúp tiết kiệm phí tri trả tiền điện hàng tháng rất nhiều so với khi dùng hệ thống điện lưới.

  •  5.Thiết bị LoRa trung tâm nhận dữ liệu:

    LoRa là viết tắt của Long Range Radio được nghiên cứu và phát triển bởi Cycleo và sau này được mua lại bởi công ty Semtech năm 2012. Với công nghệ này, chúng ta có thể truyền dữ liệu với khoảng cách lên hàng km mà không cần các mạch khuếch đại công suất; từ đó giúp tiết kiệm năng lượng tiêu thụ khi truyền/nhận dữ liệu. Do đó, LoRa có thể được áp dụng rộng rãi trong các ứng dụng thu thập dữ liệu như sensor network trong đó các sensor node có thể gửi giá trị đo đạc về trung tâm cách xa hàng km và có thể hoạt động với battery trong thời gian dài trước khi cần thay pin.

Nạp code không dây với ESP8266

 

Làm thế nào để cập nhật từ xa cho ESP8266 ? Hẳn là các bạn có biết một cách để nạp firmware cho ESP8266 cần có kết nối với máy tính qua cổng USB, vậy nếu bạn thấy quá trình trên phải sử dụng dây nối rườm rà quá, ESP8266 có wifi mà sao không tận dụng kết nối wifi để nạp luôn firmware cho chip mà chưa biết cách thì đây đúng là bài bạn cần rồi đấy.

OTA là gì ?

Cập nhật firmware OTA (Over the Air) là quá trình tải firmware mới vào ESP8266 thông qua mạng wifi thay vì sử dụng cổng Serial truyền thống.

Có 3 cách để cập nhật OTA cho ESP8266:

  • Dùng Arduino IDE: tận dụng Arduino IDE có sẵn, thay lựa chọn Port > COM bằng Port > IP
  • Dùng Web Browser: ESP8266 tạo một webserver để ta có thể chọn đường dẫn firmware mới
  • HTTP Server: Cập nhật firmware cho ESP8266 từ một server

Trong quá trình làm thì mình sẽ sử dụng linh hoạt giữa nạp firmware qua serial (cho lần đầu tiên và các lần có sự cố) và nạp firmware qua OTA. Ngoài ra thì có một số vấn đề về bảo mật khi nạp firmware qua OTA được đề cập trong bài viết chỉ ở mức đơn giản.

Chuẩn bị

Phần cứng

  • Node MCU hoặc ESP8266 phiển bản bất kỳ từ V7 trở lên + USB2UART modul (mình dùng NodeMCU)

Phần mềm

Có một yêu cầu nhỏ nữa là máy tính và ESP8266 phải kết nối tới cùng một mạng (nghĩa là chung wifi)

Cài đặt

Các bạn cài đặt python như bình thường. Mình chỉ có một lưu ý khi cài đặt Python nhớ tick chọn Add python.exe to Path như hình

Chỉ cần thế là xong, chúng ta sẽ đi vào luôn cách nạp OTA qua các ví dụ cụ thể

OTA qua Arduino IDE

Cơ bản

Chương trình OTA cho Arduino có sẵn tại đường dẫn File > Examples > ArduinoOTA > BasicOTA hoặc bạn có thể xem chương trình dưới.

Ở đây chỉ có một lưu ý là bạn phải chỉnh lại ten_wifi và password lại cho phù hợp

1
2
const char* ssid = "ten_wifi";
const char* password = "password";
Chương trình OTA Arduino

Kết quả

Sau khi nạp chương trình xuống và mở debug serial ra bạn sẽ thấy hiện IP address, quay lại chương trình chính điều chỉnh Port từ COM chuyển sang IP và tiếp tục complie nạp lại chương trình trên luôn, mục đích là mình kiểm tra xem nạp qua IP có được hay không

Lưu ý 1:

 

Nếu bạn không thấy hiện IP chỗ Port thì tắt Arduino đi và mở lại IP sẽ xuất hiện.

Để tăng tốc độ nạp chương trình bạn có thể thay đổi tại Tool > Upload speed thành 921600

 

Nếu thành công sẽ có thông báo như sau

Có mật khẩu

Tạm thời bước cập nhật qua firmware cơ bản đã thành công, tuy nhiên có một vấn đề phát sinh là nếu update như vậy thì cứ ai ở trong cùng một mạng, có máy tính và Arduino thì đều có thể điều chỉnh thay đổi và nạp firmware linh tinh xuống dưới ESP, nếu trong trường hợp nhà mình sử dụng có mỗi mình thì không vấn đề, nhưng nếu có ai có ý đồ đen tối muốn phá thì vô cùng nguy hiểm. Thôi thêm vào cái mật khẩu cho chắc ăn. Vậy thêm như thế nào ? Vẫn chương trình cũ, chỉ cần mở comment ra chỗ đoạn code

1
ArduinoOTA.setPassword((const char *)"123");

123 là mật khẩu mặc định, bạn có thể thay bằng mật khẩu riêng của mình

Lưu ý 2: Chương trình Arduino vẫn giữ nguyên, nếu có gặp lỗi không hiện IP chỗ port thì bạn vui lòng khởi động lại

 

Hiện tại ESP chỉ hỗ trợ nạp qua IP chứ chưa hỗ trợ debug hiện serial qua IP nhé, nên nhiều lúc ấn vào Debug bạn nhập pass và sẽ có báo sai liên tục. Vui lòng không dùng debug Serial khi nạp qua OTA.

ESPv1 không đủ bộ nhớ cho OTA, nên nếu làm sẽ có lỗi thiếu bộ nhớ

 

OTA qua WebBrowser

Từ việc up firmware qua Arduino quá bất tiện, nhiều lúc không nhận IP lại phải khởi động lại rất mất công thì có một cách khác để up firmware thông qua WebBrowser. Với cách này thì sẽ có một số ưu điểm trong các trường hợp sau:

  • Thấy Arduino rắc rối quá hoặc là vì lý do nào đó mà không nạp được firmware từ Arduino xuống ESP8266.
  • Khi không có server riêng để update OTA hoặc muốn update từ local.
  • Dùng để cập nhật firmware cho số lượng modul vừa phải.

Với chương trình thì chúng ta cần lưu ý chỉnh lại ten_wifi và password lại cho phù hợp

1
2
const char* ssid = "ten_wifi";
const char* password = "password";

ID và Mật khẩu để login mặc định là admin, admin

1
2
const char* update_username = "admin";
const char* update_password = "admin";
Chương trình OTA WebBrowser

Thực hiện nạp chương trình và debug thông qua COM ta sẽ có thông báo

Mở đường dẫn http://esp8266-webupdate.local/firmware để vào giao diện nạp firmware, hoặc http://dia_chi_ip/firmware , như trường hợp của mình là http://192.168.1.104/firmware

Chọn browse và chọn firmware Blink.ino.bin mình đã đưa ở trên, sau khi nạp xong bạn sẽ thấy kit NodeMCU tự động Blink LED

 

OTA qua HTTP Server

Với chương trình này ta có thể cập nhật và tải firmware từ một server HTTP, yêu cầu cần có là địa chỉ IP hoặc địa chỉ domain chứa firmware

Có 2 đoạn cần lưu ý thay cho đúng

1
2
3
WiFiMulti.addAP("ten_wifi", "password");//Thay ten_wifi và password
// Bạn cần thay abc.xyz bằng địa chỉ web chứa fw của bạn và ABC là fw tương ứng
t_httpUpdate_return ret = ESPhttpUpdate.update("http://abc.xyz/ABC.ino.bin");
Chương trình OTA HTTP Server

Ở đây mình sẽ up firmware blink LED lên server. Sau đó nạp chương trình xuống ESP8266, nếu thành công bạn sẽ thấy LED blink, dưới đây là log chương trình khi nạp firmware từ xa.

Lưu ý 3:

 

Firmware up mới phải khác firmware hiện có trên ESP thì mới thành công, nếu cố ý để 2 firmware giống nhau thì sẽ bị báo FAILED

Cần phải có server riêng với địa chỉ IP/ domain để chứa firmware mới, chỉ update được với server http, chưa sử dụng được với server https

 

Tạm kết

Vậy là mình đã trình bày qua 3 cách để các bạn có thể cập nhật được firmware từ xa, bỏ qua được dây nhợ kết nối rắc rối. Nhưng đây chỉ mới là mức cơ bản, còn lại phụ thuộc vào từng ứng dụng cụ thể mà các bạn có thể áp dụng. Hi vọng nó giúp các bạn trong bước đầu tìm hiểu nhanh chóng, có cơ sở để tiếp tục tìm kiếm và áp dụng thêm.

Chia sẻ: Nguyễn Tuấn Khiêm (Nguồn: hocarm)