Đề xuất cách kết nối các cảm biến

Một phần của tài liệu Xây dựng hệ thống giám sát thời tiết dựa trên nền tảng iot (Trang 45 - 49)

Chương 2 ĐỀ XUẤT GIẢI PHÁP

2.4 Đề xuất cách kết nối các cảm biến

Để có thể kết nối và sử dụng được các Brick, Bricklet của hãng Tinkerforge thì chúng ta sẽ sử dụng các hàm API có sẵn để giao tiếp với nhau, các ngôn ngữ được hỗ trợ bao gồm C/C++, C/C++ cho iOS, C#, C# cho WindowsPhone, Delphi/Lazarus, Java, Java cho Android, Javascrip, LabVIEW, Mathematica, MATLAB/Octave, Perl, PHP, Python, Ruby, Shell và Visual Basic .NET.

Brick Daemon là một deamon (hay còn được xem như là một dịch vụ của Windows) hoạt động như là một cầu nối giữa Brick/ Bricklets và các hàm kết nối API cho những ngôn ngữ lập trình khác nhau.

Deamon này định hướng dữ liệu giữa các kết nối USB và các socket TCP/IP.

Khi sử dụng các hàm API ghép nối với một kết nối TCP/IP thì một deamon được thiết lập. Khái niệm này cho phép tạo ra một ghép nối được sử dụng cho hầu hết các ngôn ngữ lập trình mà không phụ thuộc bất kỳ thứ gì. Chính vì vậy nó có khả năng lập trình Brick và Bricklet từ những thiết bị nhúng mà chỉ hỗ trợ cho một ngôn ngữ đặc biệt nào đó, ví dụ như các điện thoại di dộng thông minh.

Thêm vào đó, nó có khả năng tách biệt với máy chạy Brick Deamon so với các máy chạy các ngôn ngữ lập trình. Nó cho phép một Brick kết nối đến máy tính cá nhân để điều khiển từ thiết bị điện thoại di động thông minh hoặc thông qua Internet từ các máy tính cá nhân khác. Các Brick Deamon này yêu cầu các hệ điều hành Windows XP, Linux với libussb 1.0 và MacOS X 10.8 trở về sau. Mặc định Brick Deamon sẽ lưu nhật lý về các thông tin, cảnh báo và lỗi. Nó bao gồm cả những thông tin cơ bản về USB hotplug và các kết nối TCP/IP. Đối với Hệ điều hành Windows nhật ký thông điệp được xuất báo cáo ở Window Event Log. Chúng ta có thể sử dụng công cụ

logviewer.exe được cung cấp kèm theo khi cài đặt brickd để lọc xem các thông điệp của brickd từ Windows Event Logs. Còn đối với hệ điều hành Linux hoặc Mac OS X:

Nhật ký thông điệp sẽ được lưu vào /var/log/brickd.log.

Việc cấu hình Brick Daemon cũng được lưu ở dạng tệp sử dụng các giá trị, tệp này thông thường được lưu tại Tinkerforge\Brickd\brickd.ini, còn đối với Linux và Mac OS sẽ được gọi là brikd.conf và lưu ở /etc/brkcd.conf.

2.4.2 Cách kết nối các hàm API của cảm biến

Các ghép nối sử dụng hàm API cho phép chúng ta điều khiển các Brick và Bricklet từ chương trình. Nó làm điều này bằng cách thiết lập một kết nối TCP/IP đến Brick Daemon hoặc một kết nối qua Wifi hoặc mạng Ethernet. Mỗi hàm sẽ gọi một gói tin TCP/IP và gởi thông qua Brick Daemon hoặc trực tiếp đến Brick. Các gói tin đến từ các Brick sẽ được định tuyến ngược lại đến chương trình gọi nó. Chúng ta sẽ xem xét một vài thông tin để làm thế nào chúng làm việc được với nhau thông qua việc cài đặt và hướng dẫn sử dụng mỗi ngôn ngữ lập trình được hỗ trợ trong bài toán này là C# và PHP.

a) Cách kết nối các hàm API bằng C#

Để cài đặt sử dụng các hàm API cho C#, chúng ta cần có một trình biên dịch C#. Sau đó tiến hành tải tập tin nén bao gồm các nội dung sau:

- Tập tin Tinkerforge.dll, một thư viện tiền biên dịch cho C#/.NET.

- Tinkerforge.dll.mdb, gỡ lỗi cho Tinkerforge.dll.

- Tinkerforge.xml, hướng dẫn các hàm API cho Visual Studio. MonoDevelop…

- Trong thư mục source/ chứ mã nguồn của thư viện Tinkerforge.dll.

- Trong thư mục examples/ chứ ví dụ của mỗi Brick và Bricklet.

Sau đó chúng ta chỉ cần đặt tập tin Tinkerforge.dll vào trong cùng thư mục chứa mã nguồn C#. Đối với Visual Studio C# và MonoDevelop, thì chúng ta cũng có thể thấy nó đã có trong các gói hỗ trợ của NuGet package. Cần lưu ý rằng trong NuGet package không có bao gồm mã nguồn hoặc ví dụ như trong tập tin nén nêu trên. Để kết nối các Brick và Bricklet thì chúng ta cần phải tiến hành cài đặt Brick Deamon rồi sau đó tiến hành chép file Tinkerforge.dll vào thư mục như đã hướng dẫn ở trên. Sau đây là một ví dụ mẫu về việc sử dụng Bricklet Barometer để đo nhiệt độ bằng C#.

using System;

using Tinkerforge;

class Example {

private static string HOST = "localhost";

private static int PORT = 4223;

private static string UID = "XYZ"; // Đổi XYZ thành UID của Barometer Bricklet cần sử dụng

static void Main() {

IPConnection ipcon = new IPConnection(); // Tạo một kết nối IP

BrickletBarometer b = new BrickletBarometer(UID, ipcon); //

Khởi tạo đối tượng thiết bị

ipcon.Connect(HOST, PORT); // Kết nối đến brickd

// Lấy áp suất khí quyển hiện tại(đơn vị tính là mbar/1000) int airPressure = b.GetAirPressure();

Console.WriteLine("Air Pressure: " + airPressure/1000.0 + "

mbar");

// Lấy tọa độ hiện tại (đơn vị tính là cm) int altitude = b.GetAltitude();

Console.WriteLine("Altitude: " + altitude/100.0 + " m");

Console.WriteLine("Press enter to exit");

Console.ReadLine();

ipcon.Disconnect();

} }

b) Cách kết nối các hàm API bằng PHP

Để có thể sử dụng PHP để kết nối các API với brick deamon chúng ta có thể sử dụng gói cài đặt hoặc không cần cài đặt với yêu cầu phải là PHP phiên bản 5.3 trở lên và có hỗ trợ các phần mở rộng bcmath và sockets. Để tiến hành cài đặt với gói PEAR thì chúng ta sử dụng công cụ pear để tiến hành cài đặt tùy theo môi trường thực thi mà chúng ta triển khai với quyền administrator hay sudo bằng câu lệnh pear install Tinkerforge.tgz. Hoặc chúng ta chỉ cần copy tất cả các tập tin trong thư mục Tinkerforge/ từ thư mục source/ rồi tiến hành viết chương trình như bình thường. Sau đây là một ví dụ mẫu về việc sử dụng PHP để lấy thông số cường độ ánh sáng từ Bricklet Ambient.

<?php

require_once('Tinkerforge/IPConnection.php');

require_once('Tinkerforge/BrickletAmbientLight.php');

use Tinkerforge\IPConnection;

use Tinkerforge\BrickletAmbientLight;

const HOST = 'localhost';

const PORT = 4223;

const UID = 'XYZ'; // Đổi XYZ thành UID của Ambient Light Bricklet

$ipcon = new IPConnection(); // Khởi tạo một kết nối IP

$al = new BrickletAmbientLight(UID, $ipcon); // Khởi tạo đối tượng thiết bị

$ipcon->connect(HOST, PORT); // Kết nối đến brickd

// Không được sử dụng thiết bị trước khi ipcon được kết nối // Lấy thông số cường độ ánh sáng hiện tại (đơn vị là Lux/10)

$illuminance = $al->getIlluminance();

echo "Illuminance: " . $illuminance/10.0 . " Lux\n";

echo "Press key to exit\n";

fgetc(fopen('php://stdin', 'r'));

$ipcon->disconnect();

?>

2.4.3 Brick MQTT Proxy và quản lý Brick bằng Rasberry PI a) Brick MQTT Proxy

MQTT là một giao thức truyền tải dữ liệu từ máy đến máy (M2M) và Internet of Things (IoT). Brick MQTT Proxy cung cấp khả năng truy cập đến Brick và Bricklets thông qua MQTT. Nó được viết bằng Python và phiên dịch thông điệp giữa Tinkerforge TCP/IP Protocol (TFP) và MQTT. Nó hoạt động độc lập với Brick Deamon, để sử dụng nó chúng ta phải cải đặt thêm Python API Bindings và thư viện Eclipse Paho MQTT cho máy con. Trên Linux, Paho MQTT Python có thể được cài đặt bằng dòng lệnh sudo pip install paho-mqtt, sau đó có thể khởi tạo proxy bằng lệnh python brick-mqtt-proxy.py.

Proxy duy trì những thông điệp về giá trị và những thay đổi cấu hình của thiết bị hỗ trợ theo khuôn mẫu sau tinkerforge/<prefix>/<uid>/<suffix>. Ví dụ như đối với Temperature Bricklet với UID XYZ thì giá trị nhiệt độ sẽ được xuất ra như sau tinkerforge/bricklet/temperature/XYZ/temperature.

Giá trị và thông tin cấu hình sẽ được hiển thị ở JSON với định dạng sau :

{

"_timestamp": <timestamp>, "<key>": <value>

}

Tất cả các thông điệp được xuất bởi proxy bao gồm cả nhãn thời gian của HĐH Unix để chỉ định khoảng thời gian cung cấp thông tin. Tên và ý nghĩa của cặp giá trị được so khớp với định nghĩa payload của giao thức TCP/IP protocol. Tất cả các cặp giá trị được thêm vào khi msg proxy khởi tạo bỏ qua việc đụng độ tên. Ví dụ, với một giá trị nhiệt độ của một Temperature Brick với UID là XYZ, nó sẽ lưu trữ như sau:

{

"_timestamp": <timestamp>, "<key>": <value>

}

Proxy miêu tả thông điệp này nếu thêm phần kết thúc là /set thì nó sẽ cho phép bạn thay đổi cấu hình của thiết bị. Ví dự để thay đổi cấu hình của một Ambient Light Bricklet 2.0 với UID ABC đã được nạp dưới dạng JSON như sau

{

"illuminance_range": 1, "integration_time": 2 }

Chúng ta có thể xuất yêu cầu như sau

tinkerforge/bricklet/ambient_light_v2/ABC/configuration/set

Proxy sẽ so khớp và gọi thủ tục cấu hình và tiến hành nạp thông tin thông qua định nghĩa của giao thức TCP/IP. Trong trường hợp này thì khoảng cách cường độ ánh sáng sẽ được thiết lập lên mức 32000lux và thời gian tích hợp sẽ được thiết lập lên 150 ms.

b) Raspberry PI

Trong phần này sẽ miêu tả cách sử dụng Bricks và Bricklets với một Raspberry PI cùng với Debian

- Chuẩn bị thẻ nhớ SD để cài đặt Debian, có 2 cách để làm việc này đó là tải tập tin NOOBS ZIP (New out of Box Software) và giải nén nó trong thẻ nhớ. Sau đó tiến hành khởi động thiết bị Rasberry PI từ nó, tiến hành theo các bước như hướng dẫn và lựa cọn hệ điều hành Raspbian để cài đặt. Nếu chúng ta không muốn xài NOOBS cùng cũng có thể tiến hành tải một tập tin Rasbian Image và tiến hành cài đặt như bình thường.

- Sau khi kết nối nguồn, tiến hành khởi động Raspberry PI và kết nối bàn phím, màn hình. Chúng ta sẽ gặp được màn hình đăng nhập sau khi việc khởi động hoàn tất, tiến hành gỡ username pi và mật khẩu raspberry để đăng nhập vào.

- Tiến hành cài đặt Brick Deamon như sau:

sudo apt-get install libusb-1.0-0 libudev0 pm-utils wget

http://download.tinkerforge.com/tools/brickd/linux/brickd_linux_late st_armhf.deb

sudo dpkg -i brickd_linux_latest_armhf.deb

Brick Deamon sẽ được bắt đầu và tiến hành cài đặt một cách tự động. Việc cập nhật có thể cài đặt bằng việc lập lại như trên, thay 2 dòng lệnh cuối bằng câu lệnh.

wget

http://download.tinkerforge.com/tools/brickd/linux/brickd_linux_late st_armhf.deb

sudo dpkg -i brickd_linux_latest_armhf.deb

- Sau khi tiến hành cài đặt xong Brick Deamon cho Raspberry PI thì chúng ta có thể điều khiển các thiết bị kết nối đến Brick thông qua từ bên ngoài. Để làm được việc này thì chúng ta chỉ việc thay đổi host trong mục IP Connection của mã nguồn chương trình thành địa chỉ IP của Rasberry PI.

Một phần của tài liệu Xây dựng hệ thống giám sát thời tiết dựa trên nền tảng iot (Trang 45 - 49)

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

(91 trang)