[IoT] Bài 10: Cập nhật chương trình cho esp8266 từ xa qua internet (FOTA)

FOTA – tức Firmware Over-The-Air là 1 cơ chế giúp bạn nạp chương trình cho esp8266 từ xa qua mạng wifi mà không cần cắm vào máy tính

Hãy thử tưởng tượng khi bạn bán ra hàng trăm sản phẩm IoT cho khách hàng và bất ngờ phát hiện chương trình gặp 1 lỗi nhỏ. Bạn không thể thu hồi lại mạch để nạp lại chương trình mới cho khách được, việc này qua tốn kém. Thay vào đó, chỉ cần upload chương trình đã fix lỗi lên server để tất cả các thiết bị tự động cập nhật code mới ! Thật tiện lợi phải không 😀

Cách hoạt động

Khi esp8266 khởi động và kết nối vào wifi, nó sẽ gửi đi 1 truy vấn tới server của bạn kèm theo phiên bản phần mềm nó đang có. Server kiểm tra và so sánh nếu phần mềm này đã lỗi thời thì gửi file code mới xuống cho esp8266 để nó tự cập nhật chương trình cho chính nó

Lưu ý: Trong code mới cũng phải có chức năng FOTA cho lần cập nhật sau, nếu không bạn sẽ chỉ cập nhật được 1 lần rồi thôi

File code cho esp8266 sau khi biên dịch từ arduino ide có đuổi .bin
Để lấy file này thì ở Arduino IDE, các bạn vào File -> PreFerencs rồi tích vào compilation

Bây giờ khi ấn biên dịch, đường dẫn tới file code sẽ hiện ra ở đây

Các bạn theo đường dẫn này sẽ tới thư mục chưa file .bin

Mẹo: Copy đường dẫn ở arduino ide, sau đó xóa gạch chéo thừa đi rồi dán vào ô tìm kiếm thư mục cho nhanh

Lập trình chức năng FOTA

Như đã nói ở trên, trong code của các bạn ở hàm setup, chúng ta sẽ chèn thêm 1 đoạn chương trình OTA có nhiệm vụ kiểm tra trên server xem có cần cập nhật không.

Về phần server thì trong demo này mình sẽ sử dụng dịch vụ của 000webhost, 1 trang web cung cấp server free. Đương nhiên đây chỉ là server thử nghiệm, khi các bạn làm thương mại chắc chắn sẽ phải thuê hosting hoặc vps riêng cho ổn định

Sau khi đăng kí tải khoản mình đã tạo được trang web free tên là http://demo-ota.000webhostapp.com/

Các bạn vào phần quản lí website – > quản lí file để vào giao diện quản lí file. Ở đây chúng ta sẽ upload file code .bin và 1 đoạn chương trình php nho nhỏ để gửi file .bin xuống cho esp8266

Đây là giao diện quản lí file của 000webhost

Các bạn click vào thư mục public.html và tạo 1 file tên là index.php rồi dán đoạn code này vô

Giải thích code PHP:

Khi 1 thiết bị truy cập vào website của mình, tức http://demo-ota.000webhostapp.com/ nó sẽ gửi lên kèm 1 đoạn thông tin ( được gọi là header) để server biết nó là ai. lúc này trên server, file index.php sẽ được chạy, nó sẽ kiểm tra các request header để xem thiết bị truy cập kia có phải là esp8266 không, nếu sai thì nó sẽ in ra dòng Chỉ phục vụ esp8266! với mã lỗi 403 rồi thoát mà không làm gì cả.

Khi đã chắc chắn thiết bị truy cập vào server là esp8266, chúng ta sẽ tiếp tục kiểm tra xem phiên bản mà esp8266 đang có là gì. nếu không giống với phiên bản mới nhất trên server thì sẽ gửi file code .bin xuống kèm mã code 200 OK. Ngược lại thì gửi mã lỗi 403 để báo cho esp không cần phải cập nhật

Biến $VS = “2_0” báo rằng trên server đang có phiên bản “2_0”

Code cho esp8266

Các bạn hãy đổi các thông tin wifi, server thành của bạn và nạp chương trình xuống cho esp8266

Bây giờ chúng ta sẽ tạo ra phiên bản code thứ 2 để lấy file .bin rồi tải lên server. File code v2 này mình chỉ biên dịch để lấy file code .bin chứ không nạp xuống nhé

Bây giờ mình sẽ đổi tên file .bin mà arduino ide sinh ra thành 2_0.bin ( phần tên này trùng với cái biến $SV trong code PHP

Sau đó upload lên server ( cùng vị trí với file index.php nhé)

Rồi bây giờ esp của chúng ta đang chạy code bản 1_0, mình sẽ ấn reset và cho esp8266 khởi động lại, nó sẽ truy cập vào server và gửi lên thông tin dạng “tôi là esp8266, tôi đang dùng phiên bản 1_0″
Server lúc này sẽ kiểm tra và thấy nó đang có phiên bản 2_0 nên nó sẽ gửi file 2_0.bin về cho esp8266 cập nhật code mới

Lần reset tiếp theo thì esp8266 đã có số phiên bản trùng với trên server nên nó sẽ không load code lại nữa và sẽ nhảy vào chương trình chính của các bạn

esp8266 ota

 

Từ tác giả:

Nếu có bất kì thắc mắc nào trong bài viết, vui lòng để lại comment dưới mỗi bài ! Mình sẽ không trả lời thắc mắc của các bạn ở facebook hay email !

Nếu trong phần code bạn nhìn thấy nhưng thứ kiểu như &amp; thì đó là lỗi hiển thị, cụ thể 3 kí tự < > & bị biến đổi thành như thế
&amp; là &
&lt;  là <
&gt; là >

Giới thiệu Đào Nguyện 80 bài viết
DIY,chế cháo, viết blog chia sẽ kiến thức về lập trình,điện tử - IoT. Rất mong được giao lưu, kết bạn với các bạn cùng đam mê. Địa chỉ Facebook: https://www.facebook.com/nguyendao207

3 bình luận

  1. Cho anh hỏi trang web được tạo với wordpress đã thuê hosting và Domain có Upload được file code lên để cập nhật từ xa không nhỉ?

Đã đóng bình luận.