Hình ảnh Webserver thực tế khi kết nối Wi-Fi

Một phần của tài liệu THIẾT kế hệ THỐNG điều KHIỂN và GIÁM sát PHÂN tán vườn THÔNG MINH sử DỤNG VI điều KHIỂN THÔNG QUA MẠNG LORA và INTERNET 2 (Trang 66)

Tiếp tục quá trình hoạt động của chương trình, vi điều khiển sẽ thực hiện việc kết nối với chíp Lora SX1278. Nếu việc kết nối với chíp thành cơng, thì đèn báo sẽ nhấp nháy vài lần, sau đó tắt đi. Ngược lại nếu việc kết nối thất bại, thì đèn báo sẽ khơng sáng hay nhấp nháy, đồng thời ESP8266 sẽ bị đưa vào vịng lặp vơ hạn, trong vịng lặp này thì ESP8266 khơng làm việc gì cả, tương đương với ESP8266 bị đưa vào chế độ treo hay nói cách khác là bị vơ hiệu hóa.

Nếu kết nối Lora thành cơng, ESP8266 sẽ thực hiện vịng lặp vơ hạn. Tuy nhiên trong vòng lặp này sẽ thực hiện rất nhiều công việc khác nhau. Trong vòng lặp này, vi điều khiển sẽ thực hiện 6 hàm mà nhóm đã tự viết. Đầu tiên, hàm đầu tiên mà vi điều khiển thực hiện đó là hàm Clear_Old_Wifi (chỉ thực hiện khi nút Reset Wi-Fi được nhấn). Khi nút nhấn kết nối với chân D1(nhãn trên kít RF thu phát Wifi ESP8266 NodeMCU Lua CH340) được nhấn, ESP8266 sẽ thực hiện việc Reset lại kết nối Wi-Fi của nó và đưa nó vào chế độ Config Wi-Fi như quá trình đã nêu rõ ở trên. Việc thực

hiện Reset chỉ thực hiện khi ta cảm thấy cần thiết phải thay đổi Wi-Fi cho ESP8266 khi ESP8266 nằm trong vùng sóng yếu của Wi-Fi nhưng lại nằm trong vùng phủ sóng mạnh của Wi-Fi mới. Khi đó ta có thể thay đổi việc Reset Wi-Fi cũ.

Hàm tiếp theo mà ESP8266 sẽ thực hiện đó là hàm nhận Lora. Lưu đồ thuật tốn chương trình nhận Lora được trình bày như Hình 4.6. Theo như lưu đồ thuật tốn, ta sẽ thấy khi ESP8266 bắt đầu thực hiện hàm nhận Lora. ESP8266 sẽ thực hiện việc quét, phân tích xem có tín hiệu Lora gửi tới hay khơng. Nếu như khơng có bất kì tín hiệu Lora nào gửi tới, ESP8266 sẽ bỏ qua việc thực hiện các công việc khác, trực tiếp kết thúc công việc trong hàm nhận Lora này.

Ngược lại, nếu ESP8266 phát hiện có tín hiệu Lora gửi tới, ESP8266 sẽ thực hiện việc đọc các gói dữ liệu tiếp theo sau tín hiệu đầu tiên mà nó phát hiện trước đó. Các gói dữ liệu này sẽ được lưu vào một biến toàn cục để ESP8266 có thể thực hiện phân tích, xử lý các dữ liệu này. Khi phân tích dữ liệu, ta sẽ nhận được một chuỗi dữ liệu có dạng JSON. Việc xử lý JSON được thực hiện như trong mục 3.2.3.3 của chương 3. Khi xử lý dữ liệu này, ta sẽ thu được một số thông tin như “ID”, “RQ”, … Đối với “ID”, sẽ có các giá trị 1, 2, 3 hoặc 4, đây là các giá trị địa chỉ của các trạm khu vực, dùng để phân biệt các trạm khu vực với nhau. Bởi vì chip Lora khơng có địa chỉ riêng biệt, do đó ta phải tự thiết lập địa chỉ cho chúng. Khi phân biệt được địa chỉ, ta sẽ xử lý giá trị “RQ”, giá trị “RQ” này chỉ có 2 giá trị là 0 và 1. Giá trị 1, ESP8266 sẽ thực hiện việc xử lý các giá trị là nhiệt độ, độ ẩm khơng khí và độ ẩm đất, đó đó lưu vào biến đã khai báo trước. Nếu giá trị “RQ” là 1, ESP8266 sẽ lưu các giá trị là trạng thái của các thiết bị ở trạm khu vực vào CSDL. Sau khi lưu hoàn tất, ESP8266 sẽ gửi một chuỗi JSON về cho trạm khu vực để xác nhận rằng trạng thái của thiết bị đã được cập nhật. Bình thường, trạm khu vực sẽ gửi dữ liệu với “RQ” có giá trị 0 tới ESP8266, tuy nhiên nếu “RQ” có giá trị 1, tức là nút nhấn ở các trạm khu vực được nhấn. Đồng nghĩa với việc là ta điều khiển thiết bị trực tiếp ở trạm khu vực mà không sử dụng giao diện điều khiển trên Web.

Trên này là ESP8266 thực hiện nhận dữ liệu Lora từ các trạm khu vực. Trong vịng lặp cịn có các cơng việc khác cần thực hiện. Trong ngơn ngữ lập trình Arduino, có một hàm là hàm millis() sẽ bắt đầu tăng dần số đếm thời gian khi vi điều khiển khởi động hoặc reset, tối đa tăng đền thời gian 70 ngày. Trong đề tài này, nhóm sử dụng hàm này để xác định thời gian thực hiện một số các công việc khác.

Cứ năm phút một lần (hàm millis() sẽ trừ một giá trị đã cho trước để xác định thời gian), vi điều khiển sẽ thực hiện việc gửi dữ liệu gửi lên CSDL. Khi tới thời gian, ESP8266 sẽ khởi tạo giao thức HTTP để ESP8266 có thể truy cập vào CSDL. Sau đó, ESP8266 sẽ tạo một đường dẫn chứa các dữ liệu như nhiệt độ, độ ẩm khơng khí, độ ẩm đất, trạng thái thiết bị. Sau khi hoàn thành các việc trên, ESP8266 sẽ truy cập vào trang Web http://dungblog.xyz/post.php + “đường dẫn” vừa tạo phía trên thơng qua

phương thức POST. Trong file post.php bên phía Server sẽ tách các giá trị cần thiết trong “đường dẫn” để lưu vào CSDL.

Tương tự như việc gửi dữ liệu lên CSDL, mỗi 10 giây ESP8266 sẽ lấy dữ liệu từ cơ sở dữ liệu. Các dữ liệu này là các trạng thái điều khiển thiết bị mà người dùng điều

Tuy nhiên trang Web mà ESP8266 cần truy cập để lấy đữ liệu khác so với lúc gửi dữ liệu và việc lấy dữ liệu cũng không cần đường dẫn. Trang Web cần truy cập là

http://dungblog.xyz/get.php thông qua phương thức GET. Trong file get.php phía

Server sẽ lấy các giá trị điều khiển thiết bị trong CSDL và chuyển chúng thành chuỗi JSON. ESP8266 lấy dữ liệu về là dạng JSON để xử lý dễ dàng và nhanh chóng. Lưu đồ thuật tốn được miêu tả như Hình 4.7.

Hình 4. 7: Lưu đồ thuật tốn nhận dữ liệu từ CSDL

Nếu như thời gian thực hiện hai việc trên không đúng, ESP8266 sẽ quét qua hàm tiếp theo cần thực hiện. Đó là việc nhận dữ liệu từ trạm khu vực để gửi lên CSDL, cũng là việc quan trọng trong quá trình hoạt động của hệ thống. Lưu đồ thuật tốn của chương trình được biểu diễn như trong hình 4.8. Khi thực hiện chương trình này, ESP8266 sẽ kiểm tra biến counter, nếu 11 < counter < 15, sẽ tạo một chuỗi JSON chứa ID là giá trị biến counter, sau đó gửi đi các trạm khu vực. Nếu giá trị counter = 11, trạm khu vực thứ nhất sẽ gửi dữ liệu về cho ESP8266, vì đây là địa chỉ mà ESP8266 sẽ

yêu cầu trạm khu vực thứ nhất gửi dữ liệu về cho nó. ESP8266 sẽ liên tục thực hiện hàm nhận Lora cho đến khi nhận được liệu. Trong quá trình này, cứ mỗi 3 giây mà ESP8266 chưa nhận được dữ liệu gửi về, ESP8266 sẽ gửi yêu cầu dữ liệu tới trạm khu vực một lần nữa. Việc này thực hiện 3 lần khi không nhận được dữ liệu, nếu quá 3 lần thì ESP8266 sẽ bỏ qua việc nhận dữ liệu ở trạm thứ nhất, và biến counter sẽ tăng một đơn vị. Còn nếu như ESP8266 đã nhận được dữ liệu, biến counter cũng tăng một đơn vị. Việc nhận dữ liệu ở các trạm khu vực 2, 3, 4 tương đương với giá trị biến counter là 12, 13, 14, các công việc thực hiện tương tự như trạm thứ nhất. Khi đã nhận dữ liệu đủ từ bốn khu vực, biến counter sẽ reset về giá trị 11, đồng thời thoát hỏi hàm Request Data.

Hình 4. 8: Lưu đồ thuật tốn nhận dữ liệu từ trạm khu vưc

Công việc cuối cùng mà ESP8266 sẽ quét qua để thực hiện trong một vòng lặp của nó là việc kiểm tra chế độ hoạt động mà người dùng mong muốn sẽ được ESP thực hiện mỗi 6 giây một lần. Nếu ESP8266 thực hiện hàm này, việc đầu tiên cần thực

hiện là truy cập vào CSDL để nhận chế độ thực hiện. Trang Web mà ESP8266 sẽ truy cập là http://dungblog.xyz/get_auto_mode.php thông qua phương thức GET. Dữ liệu

nhận về sẽ là một chuỗi JSON có chứa giá trị xác định chế độ hoạt động và một số các thơng tin cần thiết khác.

Hình 4. 9: Lưu đồ thuật tốn chương trình xác định chế độ hoạt động của hệ thống Trong đồ án này, có 3 chế độ cho hệ thống hoạt động, trong cả 3 chế độ việc thực Trong đồ án này, có 3 chế độ cho hệ thống hoạt động, trong cả 3 chế độ việc thực hiện giám sát các thơng tin của vườn thì thực hiện hồn tồn tự động. Chỉ có việc điều

khiển thiết bị là khác nhau bao gồm: điều khiển bằng tay, tự động và bán tự động. Nếu giá trị biến chế độ là 0, thì tức là chế độ điều khiển bằng tay, ESP8266 sẽ trực tiếp thoát khỏi hàm Auto Mode Control. Nhưng nếu giá trị biến chế độ bằng 1, tức là ESP8266 lập tức đi vào chế độ bán tự động, các thiết bị được người dùng bật bằng tay, và tự động tắt sau khoảng thời gian mà người dùng đã cài đặt. Trong chế độ bán tự động, ESP8266 sẽ nhận các giá trị điều khiển thiết bị mới nhất trên CSDL để điều khiển các thiết bị ở trạm khu vực. Đồng thời ESP8266 xác định thời gian tắt các thiết bị trong chuỗi JSON đã nhận về trước đó. Nếu chưa đến thời gian kết thúc, ESP8266 sẽ thực hiện các công việc trong “Main” như trên lưu đồ thuật tốn trong Hình 4.4.

Còn nếu thời gian đã tới thời điểm kết thúc, ESP8266 sẽ tạo một chuỗi JSON tín hiệu điều khiển trạng thái thiết bị (trạng thái tắt), sau đó gửi chúng cho các trạm khu vực thông qua Lora. Ngược lại, giá trị biến chế độ bằng 2, ESP8266 ngay lập tức vào chế độ tự động hoàn tồn. Trong chế độ này, các cơng việc cần ESP8266 thực hiện giống như trong chế độ bán tự động, chỉ khác là khơng có thời gian kết thúc, và các thiết bị được điều khiển theo thời gian cố định. Đồng thời luôn kiểm tra biến điều khiển để có thể thay đổi chế độ hoạt động khi người dùng thay đổi trên giao diện điều khiển. Lưu đồ thuật tốn biểu diễn q trình hoạt động này được miêu tả trong hình 4.10.

Các cơng việc trên thực hiện lặp lại liên tục cho đến khi dừng. Ta cảm thấy việc cần xử lý là rất nhiều, tuy nhiên tần số hoạt động của ESP8266 là 80MHz nên các công việc này xử lý rất nhanh.

4.2. Trạm thu thập dữ liệu khu vực.

Tương tự như khi thiết kế trạm điều khiển trung tâm, trạm thu thập dữ liệu khu vực sử dụng dụng Arduino làm bộ xử lý chính. Arduino kết nối với Module Lora để truyền nhận dữ liệu với trạm điều khiển trung tâm, đồng thời cũng kết nối với các Module cảm biến để thu thập dữ liệu tại khu vực cần thiết. Trạm khu vực cũng cần thiết kế phần cứng và phần mềm.

4.2.1. Thiết kế phần cứng

Arduino kết nối với Module Lora thơng qua chuẩn truyền thơng SPI. Vì ở trạm khu vực, nhóm sử dụng cả hai loại vi điều khiển là Arduino Uno và Arduino Nano, vì vậy khi thiết kế phần cứng, nhóm sẽ thiết kế mạch cho cả hai loại vi điều khiển này. Sơ đồ mạch điện tử trạm thu thập dữ liệu khu vực được trình bày như hình 4.10 và

Hình 4. 10: Sơ đồ mạch điều khiển chính trạm khu vực sử dụng Arduino Uno Trong sơ đồ mạch điện trên, Arduino cịn 5 chân thừa đó là A2, A3, A4, A5 và Trong sơ đồ mạch điện trên, Arduino cịn 5 chân thừa đó là A2, A3, A4, A5 và D2. Các chân này có thể sử dụng để mở rộng mạch điện cho cơ cấu chấp hành. Hoặc có thể sử dụng để mở rộng đầu vào cảm biến, ví dụ cảm biến cường độ ánh sáng, cảm biến mưa, ...

Hình 4. 11: Sơ đồ mạch điều khiển chính trạm khu vực sử dụng Arduino Nano Tương tự như mạch điều khiển sử dụng Arduino Uno, mạch điều khiển sử dụng Tương tự như mạch điều khiển sử dụng Arduino Uno, mạch điều khiển sử dụng Arduino Nano cũng có các chân thừa là: A4, A5, A7, D3, D8, D9. Ta có thể sử dụng

A4 và A5 để mở rộng đầu ra hoặc đầu vào I2C. Các chân cịn lại có thể mở rộng đầu vào cảm biến. Việc mở rộng đầu ra, nhóm em sử dụng IC 74HC595 để mở rộng đầu cho cơ cấu chấp hành. Sơ đồ mạch cơ cấu chấp hành điều khiển các thiết bị được mơ tả như hình 4.12:

Hình 4. 12: Sơ đồ mạch điện cơ cấu chấp hành của các khu vực trung tâm

Sau khi đã thiết kế thành công sơ đồ mạch điện phần cứng của các trạm khu, ta vẽ mạch in để có thể tiến hành thi công phần cứng. Mạch in phần cứng của các trạm khu vực được trình bày như hình 4.13 và hình 4.14:

Hình 4. 14: Sơ đồ mạch in sử dụng Arduino Nano

4.2.2. Lưu đồ thuật toán

Lưu đồ thuật tốn chương trình chính của trạm thu thập dữ liệu khu vực được trình bày trong hình 4.15.

Khi trạm khu vực bắt đầu hoạt động, Arduino bắt đầu thực hiện việc kết nối vào Module Lora. Việc kết nối với Lora tương tự như ESP8266 kết nối Lora. Sau khi đã kết nối Lora thành công, các cảm biến sẽ được khởi tạo. Sau khi hồn tất các cơng việc này, Arduino tiếp tục thực hiện một vịng lặp vơ hạn.

Hình 4. 16: Lưu đồ thuật toán nhận dữ liệu Lora của trạm khu vực

Trong vòng lặp này, việc đầu tiên mà Arduino sẽ thực hiện đó là nhận dữ liệu từ mạng Lora. Lưu đồ thuật toán nhận dữ liệu Lora của trạm thu thập dữ liệu khu vực được trình bày như Hình 4.16. Theo như hình, Arduino sẽ thực hiện việc kiểm tra có hay khơng tín hiệu gửi dữ liệu tới đây, nếu khơng có tín hiệu thì Arduino sẽ trực tiếp kết thúc hàm nhận dữ liệu Lora, nhưng nếu có Arduino sẽ thực hiện việc đọc dữ liệu sau tín hiệu đầu tiên và lưu vào một biến tồn cục để xử lý. Sau khi đã có dữ liệu nhận về, dữ liệu này sẽ được mã hóa thành dạng JSON, sau đó sẽ được xử lý. Arduino sẽ kiểm tra “ID” trong chuỗi tín hiệu gửi đến, nếu ID có giá trị là 1, 2, 3 hoặc 4, Arduino sẽ lưu các giá trị điều khiển thiết bị được mang theo trong chuỗi dữ liệu gửi đến để

Arduino xử lý trong hàm Control Device. Ngược lại nếu như “ID” là 11, 12, 13, 14 thì Arduino sẽ tạo một chuỗi JSON chứa các giá trị dữ liệu nhiệt độ, độ ẩm khơng khí và độ ẩm đất để gửi sang trạm điều khiển trung tâm xử lý. Các giá trị ID là 1, 2, 3, 4 và 11, 12, 13, 14 tương đương với giá trị địa chỉ được nhóm cài đặt cho các node Lora để dễ xử lý tín hiệu. Giá trị 1 và 11 là địa chỉ của Node Lora trạm khu vực thứ nhất, tương tự, 2 và 12, 3 và 13, 4 và 14 là địa chỉ của các node Lora của trạm khu vực 2, 3, 4.

Khi đã thực hiện xong hàm nhận dữ liệu Lora, việc tiếp theo mà Arduino sẽ thực hiện trong vòng lặp vô hạn là hàm đọc giá trị cảm biến. Việc đọc cảm biến được thực hiện 20 giây một lần. Nếu đã đọc được giá trị của các cảm biến, các giá trị này sẽ được lưu lại để khi có tín hiệu u cầu sẽ gửi qua trạm điều khiển trung tâm.

Khi đã hoàn thành đọc giá trị cảm biến, việc cuối cùng mà Arduino sẽ phải thực hiện đó là hàm điều khiển thiết bị (Control Device). Các tín hiệu điều khiển các thiết bị ở trạm khu vực sẽ được trạm điều khiển trung tâm gửi tới từng trạm khu vực. Mặt khác, tín hiệu điều khiển cịn có thể nhận được từ các nút nhấn tại các trạm khu vực. Khi nhấn nút điều khiển tại trạm khu vực, trạm khu vực sẽ gửi dữ liệu tới trạm trung tâm để cập nhật tín hiệu điều khiển lên CSDL. Khi trạm trung tâm đã cập nhật thành cơng, trạm trung tâm sẽ gửi tín hiệu trả về trạm khu vực thông báo rằng đã cập nhật

Một phần của tài liệu THIẾT kế hệ THỐNG điều KHIỂN và GIÁM sát PHÂN tán vườn THÔNG MINH sử DỤNG VI điều KHIỂN THÔNG QUA MẠNG LORA và INTERNET 2 (Trang 66)

Tải bản đầy đủ (PDF)

(162 trang)