CHƯƠNG 3 : MƠ HÌNH VƯỜN THƠNG MINH PHÂN TÁN TRONG ĐỀ TÀI
4.1. Trạm điều khiển trung tâm
4.1.2. Lưu đồ thuật toán
Lưu đồ thuật tố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 tố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 hồ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 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 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 qt, 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 tồ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 khiển từ giao diện điều khiển. Các công việc thực hiện tương tự như việc gửi dữ liệ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 toà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.