3.4.1. Lựa chọn quy trình công nghệ
Thông qua một số thông tin trên về Lora, ta có thể thấy được các ưu điểm nổi bật của mạng Lora, đặt biệt là trong việc áp dụng nó vào IoT. Đó là khoảng cách truyền nhận dữ liệu siêu xa (13 – 20Km trong điều kiện lý tưởng, tối đa 80Km khi ở chế độ light-of-signt) mà nó đem lại, đồng thời năng lượng tiêu tốn của nó rất thấp (25mW). Chính vì vậy, nên nhóm em đã quyết định sử dụng Lora vào đề tài của mình thay vì sử dụng các chuẩn mạng không dây khác.
Ngoài ra, theo như các nhân tố ảnh hưởng đến quang hợp của cây trồng được trình bày trong chương 2, yếu tố ánh sáng và nồng độ CO2 có thể không cần giám sát, vì nhóm sử dụng ánh nắng từ mặt trời và khí CO2 tự nhiên. Tuy nhiên yếu tố nhiệt độ, độ ẩm không khí và độ ẩm đất rất quan trọng, cần được giám sát thường xuyên để điều
chỉnh các điều kiện duy trì sự sống cho cây trống. Vì vậy trong đồ án này, nhóm em chỉ đo đạt các thông số nhiệt độ, độ ẩm không khí và độ ẩm đất.
Trong đề tài này, chúng em sử dụng vi điều khiển Arduino để làm vi điều khiển chính tại 4 trạm khu vực để có thể giám sát được nhiều dữ liệu hơn, sẽ tính toán các thông số nhiệt độ, độ ẩm tại vườn chính xác hơn. Bên cạnh đó, nhóm sử dụng ESP8266 là vi điều khiển chính của trạm trung tâm, chúng hoạt động ổn định, có thể kết nối Wi-Fi. Hơn nữa, EPS8266 được sử dụng rất nhiều trong các ứng dụng IoT trong thực tế.
Hơn nữa, nhóm sử dụng Internet để gửi dữ liệu lên Server, giúp cho người dùng có thể giám sát, điều khiển các thiết bị tại vườn ở bất cứ đâu, bất kì thời gian nào chỉ với một thiết bị thông minh có trình duyệt Web và được kết nối Internet.
3.4.2. Nguyên lý hoạt động
Theo như sơ đồ mô hình hệ thống (hình 3.1) và sơ đồ khối hệ thống (hình 3.2), ta có thể thấy được tổng quan về quy trình hoạt động của hệ thống vườn thông minh.
Trong hệ thống này, nhóm em sử dụng Arduino thu thập dữ liệu nhiệt độ, độ ẩm không khí cũng như độ ẩm đất tại bốn khu vực trong vườn thông qua các cảm biến như cảm biến nhiệt độ, độ ẩm DHT11, cảm biến độ ẩm đất. Các dữ liệu nhiệt độ, độ ẩm không khí và độ ẩm đất đã được đo đạt này sẽ được đóng gói lại. Sau đó khi có yêu cầu từ Vi điều khiển trung tâm (ESP8266), các Arduino sẽ gửi gói dữ liệu này sang ESP8266 thông qua Lora.
Khi Vi điều khiển trung tâm đã nhận được dữ liệu, dữ liệu này sẽ được phân tích, sau đó sẽ được đưa lên Server để lưu vào Cơ sở dữ liệu. Đồng thời, trong quá trình hoạt động, ESP8266 sẽ liên tục lấy tín hiệu điều khiển từ cơ sở dữ liệu về để xử lý, nếu có sự thay đổi trạng thái của tín hiệu điều khiển so với tín hiệu ban đầu, ESP8266 sẽ gửi tín hiệu điều khiển mới này sang Arduino để điều khiển thiết bị đầu cuối tại các khu vực này.
Về phần tương tác với người dùng, người dùng sẽ truy cập vào giao diện điều khiển để giám sát các thông tin nhiệt độ, độ ẩm trong vườn. Đồng thời người dùng có thể điều khiển các thiết bị điều khiển các thiết bị tại khu vực vườn thông qua giao diện điều khiển. Khi người dùng xác nhận các tín hiệu điều khiển, các tín hiệu này sẽ được lưu vào cơ sở dữ liệu. Các tín hiệu này sẽ được ESP8266 đọc về.
CHƯƠNG 4: THIẾT KẾ MẠCH PHẦN CỨNG VÀ PHẦN MỀM CHO CÁC TRẠM THU THẬP DỮ LIỆU KHU VỰC VÀ TRUNG TÂM TRONG ĐỀ TÀI
4.1. Trạm điều khiển trung tâm.
Trạm điều khiển trung tâm sử dụng vi điều khiển ESP8266 làm bộ não chính. ESP8266 kết nối với Module Lora để nhận và gửi dữ liệu với các trạm khu vực. Đồng thời trạm trung tâm cũng nhận và gửi dữ liệu lên cơ sở dữ liệu. Việc thiết kế trạm trung tâm bao gồm phần cứng và phần mềm.
4.1.1. Thiết kế phần cứng.
Sơ đồ mạch nguyên lý của trạm điều khiển trung tâm được mô tả như hình 4.1 sau:
Hình 4. 1: Sơ đồ mạch nguyên lý của trạm điều khiển trung tâm
ESP8266 giao tiếp với Module Lora qua chuẩn giao tiếp SPI. Cấu hình của mạch trên là Master và Slave. Master là ESP8266, Slave là Module Lora. Các chân của chuẩn giao tiếp SPI là:
− MOSI (đầu ra master / đầu vào slave): Đường truyền Master gửi dữ liệu đến Slave.
− MISO (đầu vào master / đầu ra slave): Đường truyền Slave gửi dữ liệu đến Master.
− SS/CS (Slave select / Chip select): Đường truyền cho Master chọn Slave để gửi dữ liệu.
Tuy nhiên, trên đây là mạch điện tử mô phỏng, sau đây là hình ảnh mạch in (Hình 4.2) và mạch điện tử thực tế của nhóm (Hình 4.3):
Hình 4. 2: Mạch in phần cứng trạm điều khiển trung tâm
4.1.2. Lưu đồ thuật toán.
Lưu đồ thuật toán chương trình chính của trạm điều khiển trung tâm được trình bày như hình 4.4:
Hình 4. 4: Lưu đồ thuật toán của chương trình trạm điều khiển trung tâm
Lưu đồ thuật toán trên miêu tả quá trình hoạt động của vi điều khiển ESP8266 của trạm điều khiển trung tâm. Khi bắt đầu quá trình hoạt động, ESP sẽ thực hiện việc
đọc các giá trị SSID, PASSWORD (tên Wi-Fi và mật khẩu) được lưu vào EEPROM trước đó để thực hiện kết nối Wi-Fi. Chúng ta có thể nhận biết được ESP8266 đã thực hiện kết nối Wi-Fi hay chưa thông qua đèn báo Wi-Fi có sẵn trên bản thân nó. Qua một quảng thời gian ngắn tầm 5-15 giây kể từ khi cấp nguồn cho vi điều khiển, nếu nó đã kết nối vào Wi-Fi thành công, thì đèn báo sẽ sáng lên (màu xanh lam), ngược lại khi không kết nối được thì đèn báo sẽ không sáng và sẽ vào chế độ Config Wi-Fi.
Nếu trước đó, vi điều khiển chưa được cập nhật SSID và PASSWORD trong lần hoạt động trước hoặc đã được cập nhật nhưng hiện tại vi điều khiển ESP8266 không thể truy cập vào mạng Wi-Fi này, thì qua một đoạn thời gian ngắn vi điều khiển ESP8266 sẽ thực hiện việc tự bản thân nó phát ra Wi-Fi, đồng thời cũng khởi chạy Webserver đã được xây dựng sẵn đang được lưu trong bộ nhớ Flash của nó. Khi ESP8266 khởi chạy bộ phát Wi-Fi và Webserver, ta sử dụng điện thoại di động thông minh (Smartphone) có thể kết nối Wi-Fi, sau đó ta truy cập vào Wi-Fi mà ESP vừa phát ra. Tên Wi-Fi sẽ bắt đầu bằng “ESPxxxxxxxx” và xxxxxxxx là một dãy số, đồng thời Wi-Fi này không có mật khẩu. Sau khi chúng ta truy cập vào Wi-Fi này thành thành công, điện thoại sẽ tự động chuyển sang trình duyệt có sẵn trên điện thoại và truy cập vào Webserver mà ESP8266 đang phát ra. Nếu trường hợp mà điện thoại không chuyển sang trình duyệt khi chúng ta truy cập vào Wi-Fi, ta cần mở trình duyệt của điện thoại lên, và truy cập vào địa chỉ IP của ESP là 162.168.4.1 để có thể và được Webserver của ESP8266. Hình ảnh Webserver của ESP8266 như hình 4.5.
Đầu tiên khi ta truy cập vào Webserver, ta sẽ nhìn thấy được giao diện của nó như hình bên trái của hình 4.5. Khi ta thấy được giao diện này, ta thực hiện việc bấm vào nút Configure WiFi như trên giao diện. Khi này ESP sẽ thực hiện việc quét tất cả các mạng Wi-Fi khả dụng quanh nó, đồng thời hiển thị lên giao diện cho người dùng quan sát như hình ảnh bên phải. Khi này người dùng chỉ việc quan sát và chọn Wi-Fi mình muốn ESP8266 sử dụng bằng cách nhấp vào tên Wi-Fi đó. Sau khi nhấp vào, ta thực việc nhập mật khẩu của Wi-Fi đó (nếu có). Sau khi đã nhập liệu hoàn tất, ta chỉ việc ấn nút “save” hoàn thành. Khi ta vừa nhấn nút “save” trên giao diện, ESP sẽ lấy được dữ liệu là tên Wi-Fi và mật khẩu mà người dùng vừa nhập vào. Sau đó ESP8266 sẽ lưu dữ liệu vừa lấy được vào bộ nhớ EEPROM, và thực hiện việc kết nối tới Wi-Fi mà ta vừa chọn. Khi thực hiện kết nối thành công, ESP8266 sẽ tắt chế độ điểm truy cập Wi-Fi và Webserver của nó, đồng thời thực hiện các công việc tiếp theo.
Hình 4. 5: Hình ảnh Webserver thực tế khi kết nối Wi-Fi
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 toán chương trình nhận Lora được trình bày như Hình 4.6. Theo như lưu đồ thuật toá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 toán được miêu tả như Hình 4.7.
Hình 4. 7: Lưu đồ thuật toá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 toá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 toá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