PDF

Gìn giữ nguồn nước bằng ứng dụng Internet of Things,
Phần 1
Xây dựng giải pháp giám sát Raspberry Pi trên IBM Bluemix bằng Bộ
khởi động nền tảng IoT, Node-RED và Cloudant
Bram Havers (http://www.ibm.com/
developerworks/community/profiles/html/
profileView.do?key=b275c5f8-4e62-4a4f-9ea9cd48466cc1bd&tabid=dwAboutMe)
Kiến trúc sư phần mềm
IBM
01 04 2015
Kai Robbin Weller (http://www.ibm.com/
developerworks/community/profiles/html/
profileView.do?key=14e86bb7-68b8-415c-8089b778152ff494&tabid=dwAboutMe)
Chuyên gia CNTT
IBM
Robert-Jan Sips (http://www.ibm.com/
developerworks/community/profiles/html/
profileView.do?key=0ef775c1-8db8-496a-8679da06561c8bec&tabid=dwAboutMe)
Lãnh đạo Center for Advanced Studies Research
IBM
Bill Hymas (http://www.ibm.com/developerworks/
community/profiles/html/profileView.do?key=d52ee7f1bd53-4141-949b-e8cc63eca07d&tabid=dwAboutMe)
Chuyên gia IT, IBM
IBM
Hướng dẫn đầu tiên trong loạt hướng dẫn gồm ba phần này sẽ trình bày cách xây dựng một giải
pháp giám sát cây trồng trong nhà với chi phí thấp dựa trên Raspberry Pi. Giải pháp này dùng
© Copyright IBM Corporation 2015
Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1
Nhẫn hiệu đăng ký
Trang 1 của 13
developerWorks®
ibm.com/developerWorks/vn/
IBM Bluemix để thu thập và hiển thị dữ liệu của cảm biến và đăng các cập nhật lên mạng xã hội
của bạn.
Dự án Poseidon là một sáng kiến tự nguyện, nhằm giảm việc sử dụng nước trên thế giới. Trước tiên,
dự án phát triển tài liệu hướng dẫn việc giám sát lượng nước có trong đất của cây trồng trong nhà
bằng một ứng dụng xem dữ liệu cảm biến từ cây trồng để biết được khi nào thì cần tưới nước cho
cây. Mục tiêu là để xây dựng một cộng đồng hăng hái tập trung vào việc tìm ra các giải pháp làm
giảm việc sử dụng nước bằng cách áp dụng các công nghệ như Internet of Things (IoT), điện toán
đám mây, di động và phân tích.
Trong loạt hướng dẫn gồm ba phần này, bạn sẽ xây dựng một giải pháp tưới cây có chi phí thấp và
tìm cách để cùng nhau cải thiện nó. Giải pháp dựa trên Raspberry Pi và dùng IBM Bluemix để thu
thập và hiển thị dữ liệu của cảm biến và đăng các cập nhật lên mạng xã hội của bạn.
Bạn có thể xem thiết bị đang được sử dụng tại đây:
Và đây là thông điệp mà giải pháp đã đăng lên Twitter:
Kiến trúc của giải pháp có dạng như sau:
Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1
Trang 2 của 13
ibm.com/developerWorks/vn/
developerWorks®
Hệ thống dùng:
• Một Raspberry Pi có bo mạch mở rộng GrovePi, cảm biến nhiệt độ/khí áp và cảm biến độ ẩm
của đất.
• Một điểm trung gian dịch vụ đám mây IoT. Đây là dịch vụ miễn phí, có trên Internet, nhận dữ
liệu cảm biến và tái phân phối dữ liệu đến tất cả các máy khách có đăng ký. Bạn sẽ dùng giao
thức MQTT mở để thay đổi dữ liệu cảm biến.
• IBM Bluemix làm nền tảng đám mây để chạy ứng dụng. Bạn sẽ dùng Bộ khởi động nền tảng
Internet of Things để lưu và hiển thị dữ liệu cảm biến cho máy bàn và các thiết bị di động. Bộ
khởi động IoT dùng các dịch vụ Bluemix sau đây:
• Node.js: Nền tảng máy chủ để chạy các ứng dụng JavaScript.
• Node-RED: Dịch vụ giúp bạn nối dây các nút theo chức năng hiển thị trong một trình
duyệt. Bạn sẽ dùng Node-RED để nối dây dữ liệu cảm biến đến một cơ sở dữ liệu để lưu
dữ liệu, và đến một nút tweet để gửi dữ liệu đến Twitter.
• Cloudant: Một cơ sở dữ liệu đám mây NoSQL dựa theo CouchDB.
• Các dịch vụ ngoài như Twitter để đăng các thông báo khi cây trồng của bạn cần nước.
ĐỌC: Bắt đầu với Nền tảng Internet of Things
ĐỌC: Tạo ứng dụng bằng bộ khởi động Internet of Things
ĐỌC: Nền tảng Internet of Things của IBM
Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1
Trang 3 của 13
developerWorks®
ibm.com/developerWorks/vn/
“ Bộ khởi động nền tảng Internet of Things của IBM cung cấp
thời gian chạy Node.js, ứng dụng Node-RED và tạo ra một
thực thể cơ sở dữ liệu Cloudant NoSQL. ”
Bạn cần có gì để xây dựng giải pháp
• Một tài khoản Bluemix và một tài khoản Dịch vụ DevOps, cả hai đều được liên kết với ID IBM
của bạn. (Bạn sẽ dùng tài khoản Dịch vụ DevOps trong Phần 2 và 3.)
• Quen thuộc với các hệ điều hành Linux và Python, nhưng không bắt buộc.
Phần cứng yêu cầu
Bạn có thể đặt mua Raspberry Pi, bo mạch mở rộng GrovePi và các cảm biến từ Seeed
Studio hoặc Dexter Industries. Tổng chi phí các bộ phận phần cứng yêu cầu này là khoảng
100USD.
• Raspberry Pi Model B (SKU: 800025001). (Model B+ đã được phát hành sau đó và có thể
cũng phù hợp.)
• Bo mạch mở rộng GrovePi cho Raspberry Pi (SKU: 830004001)
• Grove - Máy đo khí áp (Độ chính xác cao) (bao gồm đo nhiệt độ) (SKU: 811027001)
• Grove - Cảm biến độ ẩm (SKU: SEN92355P)
• 2 cáp đa năng 4 chân có khóa của Grove (SKU ACC90453O)
• Thẻ SD 4GB
Phần cứng tùy chọn
•
•
•
•
Bộ cấp nguồn Raspberry Pi (hoặc bộ cấp nguồn USB mini khác)
Cáp HDMI để kết nối Pi với tivi hoặc màn hình của bạn
Cáp mạng ethernet
USB dùng cho chuột và bàn phím để cấu hình (một lần) cho Pi của bạn
Chạy ứng dụng
Lấy mã
Bước 1. Cài đặt Raspberry Pi
Nền tảng Raspberry giúp việc cài đặt hệ điều hành cho Raspberry Pi trở nên dễ dàng nhất có thể
bằng cách cung cấp trình cài đặt hệ thống quản lý NOOBS (New Out Of The Box).
1. Cài đặt Raspberry Pi để sẵn sàng cho việc cài đặt hệ điều hành:
a. Kết nối Pi với cáp HDMI đến màn hình hoặc tivi.
b. Kết nối cáp mạng Ethernet.
c. Kết nối USB chuột và bàn phím.
2. Cài đặt Pi với hệ điều hành Raspian theo hướng dẫn trong Bắt đầu với NOOBS.
3. Kiểm tra xem bạn có thể kết nối và đăng nhập vào Pi qua SSH hay không.
Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1
Trang 4 của 13
ibm.com/developerWorks/vn/
4.
developerWorks®
Ở bước 8 của hướng dẫn Dexter Industries, khi bạn tắt nguồn Raspberry Pi để kết nối
bo mạch mở rộng GrovePi, hãy kết nối đồng thời các cảm biến: máy đo khí áp vào
cổng I2C-1 trên GrovePi và cảm biến độ ẩm vào cổng A0.
Tạm thời chưa kết nối bo mạch mở rộng GrovePi. Theo hướng dẫn trong Kết nối Raspberry Pi
và các cảm biến Grove của Dexter Industries (nhà sản xuất GrovePi).
Phần cứng bây giờ đã được cấu hình. Bây giờ bạn cần cài đặt tập lệnh dùng để gửi dữ liệu từ cảm
biến đến dịch vụ trung tâm của đám mây để xử lý thêm.
Bước 2. Cài đặt tập lệnh máy khách Poseidon
Bạn sẽ dùng MQTT— giao thức gửi thông điệp theo dạng phát hành/đăng ký nhanh — để gửi dữ
liệu cảm biến đến đám mây IoT của IBM. Máy khách MQTT có sẵn nhiều ngôn ngữ lập trình từ dự
án Paho. Bạn sẽ dùng một máy khách Python.
1. Thay đổi thư mục gốc của bạn (cd ~) và tạo một bản sao kho lưu trữ PoseidonProject Git:
git clone https://hub.jazz.net/git/bbhavers/PoseidonProject
2. Sao chép các mô-đun và tập tin phụ thuộc:
cd PoseidonProject/Tutorial1/PoseidonClient
cp ~/GrovePi/Software/Python/grove_barometer_lib.py
cp ~/GrovePi/Software/Python/grovepi.py
3. Chỉnh sửa tập tin cấu hình config.py (bằng cách dùng vi hoặc nano): Nhập tên cảm biến trong
trường clientID và kinh độ, vĩ độ của bạn trong trường location .
4. Cài đặt thư viện máy khách MQTT:
sudo pip install paho-mqtt
5. Kiểm tra mã:
sudo python PoseidonClient.py
6. Tự động khởi động PoseidonClient khi khởi động:
a. Sao chép tập tin lệnh vào thư mục khởi động:
sudo cp poseidon.sh /etc/init.d
b. Thay đổi quyền:
sudo chmod 755 /etc/init.d/poseidon.sh
c. Kiểm tra tập lệnh khởi động:
sudo /etc/init.d/poseidon.sh start
Bạn sẽ thấy thông điệp "Khởi động PoseidonClient".
d. Kiểm tra tập lệnh có chạy hay không:
ps -ef |grep Poseidon
Bạn sẽ thấy hai mục nhập.
e. Kiểm tra tập lệnh có đăng ký hay không:
tail /home/pi/PoseidonProject/Tutorial1/PoseidonClient/poseidon.log
Nhật ký chứa tất cả dữ liệu gửi đi và ghi đè mỗi khi máy khách được khởi động lại.
f. Kiểm tra ngừng tập lệnh (việc này sẽ dừng tất cả quy trình Python đang chạy):
sudo /etc/init.d/poseidon.sh stop
Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1
Trang 5 của 13
developerWorks®
ibm.com/developerWorks/vn/
g. Kiểm tra tập lệnh đã dừng hay chưa:
ps -ef |grep Poseidon
Mục nhập mà bạn đã thấy ở bước 6d bây giờ sẽ mất.
7. Nếu đến đây mọi thứ đều diễn ra đúng như vậy, hãy kích hoạt tập lệnh để khởi động tự động
(bỏ qua cảnh báo về việc thiếu tag LSB):
sudo update-rc.d poseidon.sh defaults
8. Kiểm tra xem tập lệnh có khởi động lại khi khởi động lại hay không:
sudo shutdown -r now
Sau khi khởi động, kiểm tra các lệnh mà bạn đã chạy trước đó trong phần này.
9. Cắm cảm biến độ ẩm vào đất xung quanh cây trồng của bạn để bắt đầu giám sát.
Bây giờ Raspberry Pi của bạn đã được cấu hình và đang gửi dữ liệu đến điểm trung gian vi mô trên
Internet. Mỗi máy khách MQTT đăng ký với chủ đề như cấu hình trong config.py có thể thấy dữ liệu
mà bạn đang phát hành.
Tiếp theo, bạn sẽ thiết lập môi trường đám mây dựa trên Bluemix để thu nhận dữ liệu này, lưu nó
vào cơ sở dữ liệu và phát hành dữ liệu lên Twitter.
Bước 3. Thiết lập môi trường Bluemix
Bây giờ, bạn sẽ tạo một ứng dụng trong Bluemix dùng Bộ khởi động nền tảng Internet of Things. Bộ
khởi động IoT cung cấp thời gian chạy Node.js, ứng dụng Node-RED và tạo một thực thể cơ sở dữ
liệu Cloudant NoSQL.
1. Đăng nhập vào Bluemix. Trong bảng điều khiển, nhấp vào nút CREATE AN APP. Tìm và
chọn Internet of Things Foundation Starter từ phần Bản mẫu (Boilerplates) của catalog:
2. Nhập tên và tên máy chủ của ứng dụng. Để nguyên các lựa chọn khác theo như mặc định và
nhấp CREATE:
Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1
Trang 6 của 13
ibm.com/developerWorks/vn/
developerWorks®
dụng sẽ tự động khởi động khi việc phân bổ hoàn tất.
3. Nhấp vào đường dẫn ĐỊNH TUYẾN của ứng dụng để duyệt đến trang web của ứng dụng:
Ứng
4. Nhấp Go to your Node-RED flow editor.
5. Trong Node-RED flow editor (trình sửa luồng Node-RED), bạn có thể thấy một biểu đồ luồng
IoT mặc định:
Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1
Trang 7 của 13
developerWorks®
ibm.com/developerWorks/vn/
Bên trái là danh sách các nút có sẵn ("cổng nối" đầu vào và đầu ra và chức năng thao tác trên
dữ liệu đầu vào hoặc cung cấp đầu ra). Bên phải là các thuộc tính của nút được chọn trong
bảng công việc.
6. Chọn tất cả nút trong bảng công việc (bằng cách ấn giữ phím Shift và chọn từng nút) và nhấn
Delete để xóa chúng khỏi bảng.
Bước 4. Cấu hình Bluemix để lưu dữ liệu
Trong bước này, bạn sẽ cấu hình môi trường Bluemix để nhận dữ liệu cảm biến và lưu nó vào cơ sở
dữ liệu Cloudant.
1. Trong Node-RED flow editor, kéo nút đầu vào mqtt lên bảng công việc để tạo nút nhận dữ liệu
từ điểm trung gian MQTT mà máy khách trên Raspberry sẽ phát hành dữ liệu cảm biến đến.
2. Nhấp kép vào nút đầu vào mqtt trong bảng công việc và nhập cài đặt sau:
• Điểm trung gian: realtime.ngi.ibm.com (không có ID máy khách, không có ID và mật
khẩu người dùng)
• ClientID: Chọn ID duy nhất của bạn, như MyPoseidon23.
• Chủ đề: /org/dutchcourage/poseidon/client/sensor
• Tên: Receive Sensor Data
Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1
Trang 8 của 13
ibm.com/developerWorks/vn/
3.
developerWorks®
Một vòng tròn màu xanh dương gắn với nút biểu hiện đã được thêm (hoặc được thay
đổi) nhưng chưa được triển khai.
Thêm nút debug vào luồng và kết nối với nút đầu vào Receive Sensor Data. Nút debug sẽ hiển
thị các thông điệp nhận được trong thẻ gỡ lỗi nằm bên phải trình sửa:
4. Triển khai luồng để kiểm tra. (Ở phía trên bên phải của trình sửa, nhấp Deploy.)
5.
Xem thẻ debug (gỡ lỗi) để biết các thông điệp đến:
Bạn có thể
cần khởi động lại máy khách Poseidon trên Raspberry Pi để kích hoạt nó gửi các giá trị mới.
(Theo mặc địch, nó sẽ gửi thông điệp mỗi giờ một lần.) Xem Bước 2 để biết chi tiết về việc khởi
động lại máy khách.
6. Sau khi đã kiểm tra thành công có dữ liệu đến, hãy thêm dữ liệu này vào cơ sở dữ liệu
Cloudant bằng cách thêm nút đầu ra cloudant cho luồng và kết nối với nút Receive Sensor
Data .
7. Nhấp kép vào nút đầu ra cloudant để sửa tham số của nó:
• Dịch vụ: Chọn thực thể Bluemix Cloudant của bạn.
• Cơ sở dữ liệu: poseidonsensors
• Chỉ lưu dự án msg.payload?: Đánh dấu ô chọn.
• Tên: Save to Cloudant
8. Nhấp Deploy trong trình sửa để kích hoạt luồng và lưu dữ liệu trong cơ sở dữ liệu Cloudant.
Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1
Trang 9 của 13
developerWorks®
ibm.com/developerWorks/vn/
9. Để xem dữ liệu đã lưu trong Cloudant, duyệt trở lại tài khoản Bluemix của bạn. Trong
bảng điều khiển, bạn có thể thấy thực thể Cloudant được liệt kê trong phần Dịch vụ:
Nhấp vào thực
Cloudant
và
sau
đó
LAUNCH.
Bây
đang
Cloudant,
thể
nhấp
giờ, bạn
ở bảng điều khiển
nơi
bạn có thể tạo cơ sở dữ liệu mới, tạo tác vụ sao chép, xem và sửa các mục nhập của cơ sở dữ
liệu.
10. Nhấp vào cơ sở dữ liệu poseidonsensors (được tạo bởi nút Save to
Cloudant ). Để xem dữ liệu cảm biến thực tế, di chuyển con trỏ chuột
lên tài liệu và nhấp Edit doc nằm ở góc trên bên phải của tài liệu:
Bây giờ bạn có thể xem cấu trúc dữ liệu JSON và nội dung của tài liệu:
Dữ liệu của bạn hiện đang được lưu trong cơ sở dữ liệu.
Bước 5. Cấu hình Bluemix để gửi tweet
Bây giờ, thực thể Node-RED đã mở và đang chạy, bạn có thể mở rộng luồng để phát hành các
thông điệp MQTT đã nhận trên Twitter:
Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1
Trang 10 của 13
ibm.com/developerWorks/vn/
developerWorks®
1. Duyệt đến trình sửa luồng Node-RED.
2. Nhấp vào nút biểu tượng "hamburger" ở phía trên bên phải của trình sửa luồng và chọn Import
> Clipboard:
3. Nhập mã nguồn của luồng Node-RED đầy đủ:
a. Trong một cửa sổ duyệt riêng biệt, duyệt đến kho lưu trữ mã PoseidonProject và chọn
Tutorial1/Nodered/NodeRedFlow.txt.
b. Sao chép nội dung của NodeRedFlow.txt vào bản ghi tạm.
c. Về lại trình sửa Node-RED. Dán nội dung của bản ghi tạm vào ô nhập văn bản và nhấp
Ok:
d. Đặt luồng lên bảng làm việc.
4. Kết nối các nút mới với luồng Node-RED hiện tại:
a. Gỡ bỏ khỏi luồng đã nhập các nút mà bạn đã tạo (Receive Sensor Data, Save to
Cloudantvà debug).
b. Nối dây nút Receive Sensor Data vào nút JSON to JSOBJECT .
Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1
Trang 11 của 13
developerWorks®
ibm.com/developerWorks/vn/
Luồng Node-RED của bạn hiện giờ sẽ như sau:
5. Nhấp kép nút Tweet Sensor Values và nhấp vào biểu tượng cây bút để xác thực tài khoản
Twitter của bạn với Node-RED:
6. Nhấp Deploy để lưu các thay đổi.
7. Dừng và khởi động máy khách Poseidon trên Raspberry Pi để khởi tạo việc gửi lại
dữ liệu, và xem tài khoản Twitter của bạn về thông điệp báo cáo dữ liệu cảm biến:
Bạn đang gửi dữ liệu đến Twitter.
Kết luận Phần 1
Trong hướng dẫn này, bạn đã học cách thiết lập một Raspberry Pi có các cảm biến để giám sát độ
ẩm của đất, áp suất khí áp và nhiệt độ. Bạn đã cấu hình máy khách để gửi dữ liệu qua MQTT đến
điểm trung gian đám mây IoT của IBM. Với Bluemix, bạn có thể thu nhận dữ liệu này, lưu nó vào
một cơ sở dữ liệu Cloudant và phát hành dữ liệu lên Twitter. Bạn đã học cách tạo một luồng từ đầu
đến cuối từ cảm biến để chia sẻ dữ liệu lên mạng xã hội, và bây giờ bạn có thể bắt đầu mở rộng
chức năng của giải pháp — ví dụ, với các ứng dụng di động và bằng cách phân tích dữ liệu để dự
báo khi nào cây trồng cần nước
Bây giờ, tiếp tục sang Phần 2 để tìm hiểu cách bảo mật thực thể Node-RED và triển khai tự động
các thay đổi cho ứng dụng. Và sau đó, trong Phần 3, bạn sẽ nâng cao giải pháp bằng cách xây dựng
một ứng dụng dành cho máy khách để hiển thị dữ liệu cảm biến ở dạng đồ thị.
Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1
Trang 12 của 13
ibm.com/developerWorks/vn/
developerWorks®
Đôi nét về các tác giả
Bram Havers
Kiến trúc sư phần mềm, công ty IBM
Kai Robbin Weller
Chuyên gia công nghệ thông tin, công ty IBM
Robert-Jan Sips
Lãnh đạo Center for Advanced Studies Research / University Relations Manager, IBM
Bill Hymas
Chuyên gia IT, IBM
© Copyright IBM Corporation 2015
(www.ibm.com/legal/copytrade.shtml)
Nhẫn hiệu đăng ký
(www.ibm.com/developerworks/vn/ibm/trademarks/)
Gìn giữ nguồn nước bằng ứng dụng Internet of Things, Phần 1
Trang 13 của 13