- Vật liệu thiết yếu:
- Làm thế nào mọi thứ hoạt động?
- Lập trình ESP8266-01:
- Kết nối ESP8266-01 với Arduino:
- Chương trình Arduino và hoạt động:
ESP8266-01 là một mô-đun tuyệt vời để giải tỏa mọi khát khao của chúng ta đối với các dự án IOT. Kể từ khi phát hành, nó đã phát triển một cộng đồng mạnh mẽ và phát triển thành một mô-đun Wi-Fi dễ sử dụng, giá rẻ và mạnh mẽ. Một nền tảng mã nguồn mở khác phổ biến hơn nhiều là Arduino, nó đã có rất nhiều dự án được xây dựng xung quanh nó. Kết hợp hai nền tảng này sẽ mở ra cánh cửa cho nhiều dự án sáng tạo, vì vậy trong hướng dẫn này, chúng ta sẽ học cách giao diện mô-đun ESP8266-01 với Arduino. Bằng cách này, chúng tôi sẽ có thể gửi hoặc nhận dữ liệu giữa Arduino và Internet.
Với mục đích của hướng dẫn này, chúng tôi sẽ đọc thời gian, ngày tháng, nhiệt độ và độ ẩm từ Internet bằng cách sử dụng API với ESP8266-01. Sau đó gửi các giá trị này đến bảng Arduino và hiển thị chúng trên màn hình LCD 16 * 2. Nghe hấp dẫn phải không !! Vậy hãy bắt đầu.
Vật liệu thiết yếu:
- Bảng Arduino (Bất kỳ phiên bản nào)
- ESP8266-01
- Bảng lập trình FTDI với tùy chọn 3.3V
- LCD 16x2
- Chiết áp
- Nút ấn
- Kết nối dây
- Breadboard
Làm thế nào mọi thứ hoạt động?
Trước khi chúng ta đi sâu vào, điều quan trọng là phải biết điều này thực sự sẽ hoạt động như thế nào. Về cơ bản, chúng ta phải bắt đầu với mô-đun ESP8266-01. Chúng tôi sẽ sử dụng Arduino IDE để lập trình ESP8266 và mã sẽ được viết để sử dụng API để đọc tệp JSON thông qua yêu cầu http. Sau đó, chúng tôi sẽ cụm từ tệp JSON này để chỉ trích xuất thông tin được yêu cầu từ tệp JSON hoàn chỉnh.
Sau khi thông tin được phân loại, chúng tôi sẽ in nó ra bằng cách sử dụng giao tiếp nối tiếp. Sau đó, các đường nối tiếp này sẽ được kết nối với Arduino, để Arduino có thể đọc thông tin được gửi từ ESP8266. Sau khi thông tin được đọc và xử lý, chúng tôi sẽ hiển thị nó trên màn hình LCD.
Không sao, nếu bạn chưa hoàn toàn hiểu điều này, vì chúng ta sẽ học tương tự trong phần còn lại của hướng dẫn này.
Lập trình ESP8266-01:
Hướng dẫn này giả định rằng bạn có một số kinh nghiệm với mô-đun ESP8266. Nếu không thì bạn nên đọc qua ba hướng dẫn sau để hiểu hoàn toàn về nó.
- Bắt đầu với ESP8266-01
- Lập trình ESP8266-01 bằng lệnh AT
- Lập trình ESP8266-01 bằng Arduino IDE và nhấp nháy bộ nhớ của nó
Bạn cũng có thể kiểm tra tất cả các dự án ESP8266 của chúng tôi tại đây.
Ở đây chúng ta sẽ lập trình mô-đun ESP8266-01 bằng Arduino IDE. Đối với phần cứng, chúng tôi đang sử dụng bo mạch FTDI với 3.3V để lập trình ESP8266, vì nó sẽ làm cho phần cứng đơn giản hơn nhiều. Sơ đồ mạch để kết nối ESP8266 của bạn với bảng FTDI được hiển thị bên dưới.
Đảm bảo các điều kiện sau được đáp ứng
1. ESP8266-01 chỉ chịu được 3.3V, không sử dụng 5V. Vì vậy, chỉ đặt FTDI ở chế độ 3.3V.
2. GPIO_0 phải được nối đất cho chế độ lập trình
3. Chốt đặt lại phải được kết nối thông qua một nút với chân nối đất. Nút này phải được nhấn ngay trước khi tải lên mã. Mỗi lần nhấn nút, đèn LED màu xanh lam trên mô-đun ESP8266-01 sẽ tăng cao để cho biết rằng mô-đun đã được đặt lại.
Sau khi kết nối xong, hãy mở Arduino IDE và kiểm tra xem bạn có thể tải lên chương trình mẫu thành công hay không. Nếu bạn không chắc chắn về cách sử dụng Arduino IDE để tải chương trình lên ESP8266 thì hãy theo dõi Lập trình ESP8266 với Arduino để tìm hiểu nó. Tại thời điểm này, tôi giả sử rằng bạn đã tải lên chương trình nhấp nháy thành công.
. Chương trình hoàn chỉnh được đưa ra ở cuối trang này, bên dưới tôi sẽ giải thích chúng dưới dạng các đoạn trích nhỏ. Chương trình cũng yêu cầu thư viện Arduino JSON để biên dịch, vì vậy nếu bạn chưa thêm thư viện vào IDE Arduino của mình, hãy thêm nó bằng cách tải xuống từ thư viện Arduino JSON từ Github.
ESP8266 phải kết nối với internet để lấy dữ liệu về ngày, giờ, nhiệt độ và độ ẩm. Vì vậy, bạn phải cho phép nó kết nối với Wi-Fi của bạn bằng cách chứng minh SSID và Mật khẩu trong các dòng bên dưới
const char * ssid = "JIO-Fi"; // Nhập SSID Wi-Fi của bạn const char * password = "Pas123"; // Nhập mật khẩu Wi-Fi của bạn
Bên trong hàm setup (), chúng tôi kiểm tra xem ESP có thể kết nối với Wi-Fi hay không, nếu không, nó sẽ đợi ở đó mãi mãi chỉ bằng cách in “Connecting..” trên màn hình nối tiếp.
while (WiFi.status ()! = WL_CONNECTED) {// Chờ cho đến khi kết nối Wi-Fi trễ (1000); Serial.print ("Đang kết nối.."); // Kết nối In.. cho đến khi kết nối được thiết lập }
Bước tiếp theo là bước rất quan trọng. Nếu kết nối Wi-Fi thành công, chúng tôi phải gọi một yêu cầu nhận http để đọc tệp JSON từ internet. Trong hướng dẫn này, tôi đang sử dụng API do wunderground.com cung cấp. Vì vậy, nếu bạn dự định sử dụng cùng một khóa, bạn có thể truy cập vào liên kết và đăng ký khóa API miễn phí hoặc sử dụng bất kỳ API nào bạn chọn. Sau khi hoàn tất API của mình, bạn sẽ nhận được một liên kết như thế này bên dưới
Lưu ý: Tôi đã thay đổi khóa API của liên kết này nên điều này sẽ không hoạt động. Giữ khóa API của bạn được bảo mật và không chia sẻ.
API của tôi ở đây được sử dụng để lấy dữ liệu thời tiết của Chennai. Bạn có thể sử dụng bất kỳ API nào. Nhưng khi bạn tải API trong bất kỳ trình duyệt nào, nó sẽ trả về một tệp JSON. Ví dụ: API của tôi trả về tệp JSON sau
Của bạn có thể trả về một tệp với dữ liệu khác nhau. Chúng tôi có thể kiểm tra xem tệp JSON này có được ESP8266 của chúng tôi nhận hay không bằng cách đọc nó và in JSON trên màn hình nối tiếp của chúng tôi bằng các dòng sau
int httpCode = http.GET (); // chuyển một yêu cầu nhận if (httpCode> 0) {// Kiểm tra mã trả về // payload = http.getString (); // Lưu trữ giá trị trên varibale Payload để gỡ lỗi // Serial.println (payload); // In tải trọng để gỡ lỗi, nếu không hãy chú thích cả hai dòng
Tôi đã nhận xét những dòng này, vì chúng chỉ cần thiết để thử nghiệm. Khi bạn đã đảm bảo rằng ESP8266 có thể lấy dữ liệu JSON thì đã đến lúc phân loại Dữ liệu. Như bạn có thể thấy, dữ liệu này rất lớn và hầu hết các giá trị đều vô dụng ngoại trừ những giá trị cần thiết cho chúng ta như ngày, giờ, nhiệt độ và độ ẩm.
Vì vậy, chúng tôi sử dụng thư viện JSON Arduino để tách các giá trị cần thiết cho chúng tôi và lưu trữ nó trong một biến. Điều này là có thể vì các giá trị trong tệp JSON được gán dưới dạng các cặp giá trị tên. Vì vậy, tên này là một chuỗi sẽ giữ giá trị cần thiết cho chúng ta.
Để làm điều này, chúng ta phải chuyển đến một trang web sẽ phân tích tệp JSON và cung cấp cho chúng ta mã Arduino. Vâng, nó là dễ dàng như vậy. Tiếp tục truy cập https://arduinojson.org/assistant/ và dán tệp JSON mà chúng tôi đã tải vào trình duyệt của mình và nhấn enter. Khi hoàn thành của tôi trông giống như sau
Cuộn xuống một chút để xem chương trình phrasing được tạo tự động
Tất cả những gì bạn phải làm là chọn biến bạn muốn, sao chép chúng và dán vào Arduino IDE của bạn, giống như tôi đã làm ở đây
/ * Dữ liệu phân đoạn bằng cách sử dụng thư viện JSON * / // Sử dụng https://arduinojson.org/assistant/ để nhận các giá trị phân từ cho chuỗi JSON của bạn const size_t bufferSize = JSON_OBJECT_SIZE (0) + JSON_OBJECT_SIZE (1) + JSON_OBJECT_SIZE (2) + 2 * JSON_OBJECT_SIZE (3) + JSON_OBJECT_SIZE (8) + JSON_OBJECT_SIZE (12) + JSON_OBJECT_SIZE (56) + 2160; DynamicJsonBuffer jsonBuffer (bufferSize); JsonObject & root = jsonBuffer.parseObject (http.getString ()); / * End of Phrasing Data * / // Định giá trị sin cho các biến mong muốn JsonObject & current_observation = root; // dưới current_observation JsonObject & current_observation_observation_location = current_observation; // theo địa chỉ quan sát const char * current_observation_station_id = current_observation; // "ICHENNAI1" // lấy thông tin vị trí const char * current_observation_local_time_rfc822 = current_observation; // Giờ địa phương // lấy giờ địa phương const char * current_observation_tempether_string = current_observation; // "90,7 F (32,6 C)" // lấy giá trị nhiệt độ const char * current_observation_relative_humidity = current_observation; // "73%" // lấy giá trị độ ẩm
Tôi vừa sao chép các biến current_observation_station_id, current_observation_local_time_rfc822, current_observation_tempether_string và current_observation_relative_humidity . Vì chúng tôi dự định chỉ hiển thị bốn dữ liệu đó trên màn hình LCD.
Cuối cùng, chúng tôi đã có được dữ liệu mà chúng tôi cần từ internet và đã lưu nó thành một biến mà chúng tôi có thể thoải mái sử dụng. Để gửi những dữ liệu này đến Arduino, chúng tôi chỉ cần ghi chúng theo thứ tự thông qua màn hình nối tiếp. Các dòng sau sẽ làm giống hệt như vậy
// In các biến thông qua màn hình nối tiếp Serial.print (current_observation_station_id); // gửi chi tiết vị trí đến Arduino delay (100); // độ trễ ổn định Serial.print (current_observation_local_time_rfc822); // gửi chi tiết giờ địa phương tới Arduino delay (100); // độ trễ ổn định Serial.print (current_observation_tempether_string); // gửi chi tiết nhiệt độ đến Arduino delay (100); // độ trễ ổn định Serial.print (current_observation_relative_humidity); // gửi chi tiết độ ẩm đến Arduino delay (100); // độ trễ ổn định
Lưu ý rằng tôi đã sử dụng Serial.print () chứ không phải Serial.println () vì lệnh Serial.println () sẽ thêm a / n và / r cùng với dữ liệu không cần thiết cho chúng ta. Chúng tôi cũng đã thêm độ trễ 10 giây để ESP sẽ chỉ gửi các giá trị này trong khoảng thời gian 10 giây đến Arduino.
Kết nối ESP8266-01 với Arduino:
Cho đến nay, chúng tôi đã lập trình ESP8266-01 của mình để đọc dữ liệu được yêu cầu từ internet trong khoảng thời gian 10 giây và gửi nó ra ngoài theo thứ tự. Bây giờ chúng ta phải giao diện ESP với Arduino để chúng ta có thể đọc dữ liệu nối tiếp này. Chúng tôi cũng phải thêm màn hình LCD 16 * 2 vào Arduino để có thể hiển thị dữ liệu nhận được từ mô-đun ESP8266. Các sơ đồ mạch để giao tiếp module ESP8266 với Arduino được hiển thị dưới đây
Đảm bảo rằng chân GPIO_0 được để trống, chỉ cấp nguồn cho mô-đun bằng chân 3.3V của Arduino và nhấn nút nhấn để đưa mô-đun ESP vào mô-đun hoạt động. Bây giờ chương trình mà chúng tôi đã tải lên ESP lẽ ra đã bắt đầu hoạt động và mô-đun sẽ được gửi dữ liệu qua chân nối tiếp tới Arduino. Các chân nối tiếp này được kết nối với chân số 6 và 7 trên Arduino. Vì vậy, chúng ta có thể sử dụng tùy chọn nối tiếp phần mềm trên Arduino để đọc các dữ liệu nối tiếp này từ các chân.
Chương trình Arduino và hoạt động:
Các hoàn thành chương trình Arduino cũng được đưa ra cùng với mã ESP ở phần cuối của trang này. Bạn có thể cuộn xuống để xem chương trình hoặc đọc thêm nếu muốn hiểu chương trình.
Chương trình giao diện khá đơn giản, chúng ta chỉ cần sử dụng thư viện nối tiếp phần mềm để đọc dữ liệu từ chân 6 và 7 và hiển thị chúng trên màn hình LCD. Vì dữ liệu nhận được ở định dạng chuỗi, chúng tôi phải sử dụng tùy chọn chuỗi con để phá vỡ tải trọng theo yêu cầu của chúng tôi hoặc thậm chí chuyển đổi nó thành số nguyên nếu được yêu cầu. Vì vậy, chúng tôi bắt đầu bằng cách xác định các chân mà màn hình LCD được kết nối.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Các chân mà LCD được kết nối LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Vì chúng tôi đã kết nối các chân Rx và Tx của ESP8266 với chân thứ 6 và 7 của Arduino, chúng tôi phải khởi tạo nối tiếp Phần mềm cho các chân đó để chúng tôi có thể nhận dữ liệu nối tiếp từ chúng. Tôi có tên là ESP_Serial, bạn có thể đặt tên cho họ bất cứ điều gì bạn muốn
Phần mềm ESP_Serial (6,7); // Tx, Rx
Bên trong hàm setup (), chúng ta khởi tạo giao tiếp nối tiếp cho màn hình nối tiếp và cũng cho nối tiếp phần mềm. Nếu bạn có thể nhớ lại, chúng tôi đã tạo chương trình ESP để giao tiếp ở tốc độ truyền 9600, vì vậy chúng tôi phải sử dụng cùng tốc độ truyền cho cổng nối tiếp phần mềm. Chúng tôi cũng hiển thị một thông báo giới thiệu nhỏ trên màn hình LCD trong 2 giây.
void setup () {lcd.begin (16, 2); // Chúng tôi đang sử dụng màn hình LCD 16 * 2 lcd.print ("Arduino & ESP"); // Hiển thị thông báo giới thiệu Serial.begin (115200); ESP_Serial.begin (9600); chậm trễ (2000); lcd.clear (); }
Bên trong hàm loop () chính, chúng ta phải kiểm tra xem ESP8266 có gửi bất cứ thứ gì không. Nếu đúng như vậy, thì chúng tôi đọc chuỗi từ ESP8266 và lưu nó vào một biến có tên là payload. Tải trọng biến đổi thuộc loại Chuỗi và nó sẽ chứa thông tin đầy đủ được gửi dưới dạng mô-đun ESP8266.
while (ESP_Serial.available ()> 0) {payload = ESP_Serial.readString ();
Bây giờ chúng ta phải chia chuỗi này thành nhiều đoạn nhỏ để chúng ta có thể sử dụng chúng cho mục đích của riêng mình, trong trường hợp này chúng ta phải chia nhỏ chúng ra để hiển thị trên màn hình LCD. Điều này có thể được thực hiện dễ dàng bằng cách sử dụng hàm chuỗi con trong Arduino. Bạn phải biết vị trí của từng ký tự để sử dụng hàm chuỗi con này. Bạn có thể in tải trọng trên màn hình nối tiếp để biết vị trí của các ký tự và sử dụng chúng để phân loại các chuỗi con như hình dưới đây
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); nhiệt độ = payload.substring (48, 54); Humidity = payload.substring (55, 60);
Bây giờ tôi có thể tiếp tục và sử dụng các biến này để in chúng trên màn hình nối tiếp hoặc chỉ in chúng trên màn hình LCD. Tuy nhiên, việc in chúng trên màn hình nối tiếp sẽ giúp chúng tôi kiểm tra xem các chuỗi con có được phân chia chính xác hay không. Tiếp theo, chúng tôi chỉ cần in chúng trên màn hình LCD bằng các dòng sau
lcd.clear (); lcd.setCursor (1, 0); lcd.print (local_date); lcd.setCursor (8, 0); lcd.print (local_time); lcd.setCursor (1, 1); lcd.print (nhiệt độ); lcd.setCursor (10, 1); lcd.print (Độ ẩm);
Tải chương trình lên Arduino và đảm bảo các kết nối được hiển thị trong sơ đồ mạch ở trên. Điều chỉnh độ tương phản của màn hình LCD cho đến khi bạn nhìn rõ mọi thứ. Bạn sẽ thấy thông báo Giới thiệu trên màn hình LCD và sau đó vài giây, các chi tiết như ngày, giờ, nhiệt độ và Độ ẩm sẽ được hiển thị trên màn hình LCD như hình dưới đây.
Bạn cũng có thể nhận thấy đèn LED màu xanh lam trên ESP8266 nhấp nháy mỗi khi Dữ liệu đến. Nếu bạn không thể thấy điều này, điều đó có nghĩa là ESP không ở chế độ lập trình, hãy thử nhấn nút Đặt lại cũng kiểm tra các kết nối.
Tương tự như vậy, bạn có thể sử dụng bất kỳ API nào để lấy bất kỳ dữ liệu cần thiết nào từ internet và cung cấp dữ liệu đó cho Arduino và xử lý công việc của bạn với Arduino. Có rất nhiều API có sẵn trên internet và với tất cả những thứ đó, bạn có thể thực hiện vô số dự án. Hy vọng bạn hiểu dự án và thích xây dựng nó. Nếu bạn gặp bất kỳ vấn đề nào, hãy đăng chúng vào phần bình luận bên dưới hoặc trên diễn đàn của chúng tôi.
Bạn có thể tìm thấy tất cả các dự án liên quan đến ESP8266 của chúng tôi tại đây.