ESP8266 và IOT (Part 7): Vị trí Devices trên Map

Device on a Map

Internet of Things Workbench

Trong bài này tôi sẽ chỉ cho bạn cách sửa dụng Internet of Things Workbench service trong IBM Bluemix để nhanh chóng phát triển một app có thể được dùng để xác định vị trí trên map, có thể lấy giá trị cảm biến bằng cách click lên marker hiển thị thiết bị nhất định. Để làm chuyện này, tôi sẽ cố định tọa độ và sẽ gửi tọa độ từ thiết bị của bạn. Nếu bạn có thiết bị tĩnh, nó thì ổn, nhưng nếu bạn cần theo dõi thiết bị di chuyển, bạn có thể thêm một GPS module để nhận tọa độ, nhưng nguyên tắc thì tương tự.

IoT Workbench là phiên bản thử nghiệm, nó chỉ hỗ trợ ở US South. Bạn có thể tìm service này trong Bluemix Labs catalog, nó ở phía dưới của catalog.

7_1
Labs Catalog

Trong Labs catalog, cuộn xuống Internet of Things và click vào Internet of Things Workbench.

IoT Workbench
IoT Workbench

Chọn space của bạn, đặt một cái tên và click Create button (bây giờ, bạn có thể chọn plan thử nghiệm). Điều đầu tiên chúng ta cần làm là thạo một solution mới. Nhập solution name và click nút Create new Solution.

Creating a New Solution
Creating a New Solution

Sau khi bạn mở một solution bạn vừa tạo, bạn sẽ thấy cấu trúc tab và những ví dụ của app được tự đông tạo ra.

IoT Workbench Editor
IoT Workbench Editor

Trong editor bạn đặt nhưng component khác nhau và nối chung lại giống như việc tạo một app vậy. Bạn có thể xóa các flown đã được tạo và mở library tab. Chọn Devices on Maps và click Add Element to Solution.

Devices on Maps
Devices on Maps

Vì bạn đang chỉ sử dụng một loại thiết bị, bạn có thể xoa một thành phần (element) của thiết bị. Đồng thời đặt tên thích hợp cho app và element thiết bị.

App Flow
App Flow

Click vào element của thiết bị và bạn có thể xem các property mà thiết bị của bạn gửi đến app. Lat và Lon hiển thị latitude (vĩ độ) và longitude (kinh độ) để xác định vị trí thiết bị. Chúng ta sẽ thêm một property cho dữ liệu ADC. Một payload của thiết bị hcungs ta sẽ publish thông tin chứa 4 parameter: device name, ADC value và latitude và longitude.

Payload Properties
Payload Properties

Bây giờ click vào connection line giữa thiết bị và element của app và thiết lập định dạng của MQTT message sẽ được dùng. Trường NAME sẽ  được dùng trong publish topic. Thêm ADC vào trường payload.

Configuration of MQTT Messages
Configuration of MQTT Messages

Deploy (triển khai) App

Để deploy app, bạn cần đăng ký ở đây. Ứng dụng của bạn sẽ được đặt trong các repository rời rạc. Bluemix sẽ hỏi bạn để đăng ký nếu bạn chưa có tài khoản, và nó sẽ set mọi thứ khi bạn deploy app sử dụng IoT Workbench service.

Bạn đã sẵn sàng deploy app. Click vào app element và click nút Deploy to Bluemix.

Deploying the App
Deploying the App

Sau khi tiến hành deploy hoàn thành, bạn thấy app mới trong main dashboard.

Bạn có thể thấy một IoT platform service mới tự động liên kết với app. Bạn đăng ý các thiết bị với no bằng cách theo các bước giải thích ở bài 3, nếu bạn sẵn sàng để thiết lập một IoT Platform service, bạn có thể dùng nó, chỉ cần liên kết nó với app. Bất cứ intstance nào của IoT platform service bạn muốn dùng, bạn sẽ cần có API key và AUTH token. Chạy IoT platform dashboard, vào ACCESS > API keys và generate key – token. Ở gói phải của IoT Workbench solution, bở MQTT Setttings và nhập key và token.

MQTT Settings
MQTT Settings

Click vào App element, nhập GIT user name và password của bạn và click nut Deliver.

Delivering the App
Delivering the App

Bạn có thể mở delivery pipline và theo dõi quá trình delivery.

Delivery Pipeline
Delivery Pipeline

Sau khi quá trình hoàn thành, mở app của bạn lên bằng cách click vào <appName>.mybluemix.net. nếu redirection message xuất hiện và cửa sổ yêu cầu về user name và password hiện lên, nhập ‘ADMIN’ trong cả 2 trường. Bạn xem trang sau:

Messages Monitor
Messages Monitor

Chưa có bất cứ MQTT message nào được publish.

Uploading Firmware lên ESP8266

Bây giờ bạn cần uploade code vào ESP8266. Có một điểm khác với ví dụ trước là thiết bị bạn bây giờ đang gửi đi kèm theo giá trị latlon để app đùng định vị trí thiết bị. Như tôi đã nói, với mục đích này dữ liệu sẽ được cố đinh và sinh ra với code. Đảm bảo rằng publish topic tương ưng với dữ liệu tên trong MQTT configuration trong Workbench.

#include <ESP8266WiFi.h>
#include <PubSubClient.h> // https://github.com/knolleary/pubsubclient/releases/tag/v2.3

const char* ssid = "";
const char* password = "";

#define ORG "<yourOrganization>"
#define DEVICE_TYPE "ESP8266"
#define DEVICE_ID "<yourDeviceID>"
#define TOKEN "<yourToken>"

char server[] = ORG ".messaging.internetofthings.ibmcloud.com";
char topic[] = "iot-2/evt/SendData/fmt/json";
char authMethod[] = "use-token-auth";
char token[] = TOKEN;
char clientId[] = "d:" ORG ":" DEVICE_TYPE ":" DEVICE_ID;

WiFiClient wifiClient;
PubSubClient client(server, 1883, callback, wifiClient);

const double lat = 42.444299;
const double lon = 19.236563;

//converting lat and lon values to strings
String lat_str = String((int)lat) + "." + ((int)(1000000 * lat))%1000000;
String lon_str = String((int)lon) + "." + ((int)(1000000 * lon))%1000000;

void setup() {
 Serial.begin(115200);
 Serial.println();

 Serial.print("Connecting to ");
 Serial.print(ssid);
 WiFi.begin(ssid, password);
 while (WiFi.status() != WL_CONNECTED) {
 delay(500);
 Serial.print(".");
 } 
 Serial.println("");

 Serial.print("WiFi connected, IP address: ");
 Serial.println(WiFi.localIP());
}

void loop() {

 if (!client.connected()) {
 Serial.print("Reconnecting client to ");
 Serial.println(server);
 while (!client.connect(clientId, authMethod, token)) {
 Serial.print(".");
 delay(500);
 }
 Serial.println();
 }

 String payload = "{\"d\":{\"Name\":\"18FE34D81E46\"";
 payload += ",\"ADC\":";
 payload+= analogRead(A0);
 payload += ",\"lat\":";
 payload += lat_str;
 payload += ",\"lon\":";
 payload += lon_str;
 payload += "}}";

 Serial.print("Sending payload: ");
 Serial.println(payload);
 
 if (client.publish(topic, (char*) payload.c_str())) {
 Serial.println("Publish ok");
 } else {
 Serial.println("Publish failed");
 }

 client.loop();
  
 delay(3000);

}

void callback(char* topic, byte* payload, unsigned int length) {
 Serial.println("callback invoked");
}

Nếu thiết bị của bạn publish event thành công, bạn có thể thấy chúng khi mở app.

Published MQTT Messages
Published MQTT Messages

Để coi map, bạn phải thêm ‘/maps’ vào địa chỉ của ứng dụng của bạn. Vào <appName>.mybluemix.net/maps và bạn có thể thấy thiết bị của bạn trên map ở vị trí xác định bởi latitube và longtitude. Nếu bạn click vào marker bạn có thể xem chi tiết về giá trị ADC của thiết bị publish lên.

Device on a Map
Device on a Map

Kết thúc bài 7, bạn đã biết cách sửa dụng IoT Workbench để phát triển nhanh một ứng dụng dùng để hiển thị thiết bị trên map.

Các bài cùng Series

(Part 1): Làm quen với ESP8266
(Part 2): ESP8266 với MQTT
(Part 3): Kết nối ESP8266 với IBM Bluemix
(Part 4): Dùng Cloudant DB trong IBM Bluemix để lưu trữ dữ liệu
(Part 5): Gửi Email và SMS thông báo khi bị trigger từ dữ liệu cảm biến
(Part 6): Hiển thị dữ liệu cảm biến với IBM Bluemix
(Part 7): Vị trí Devices trên Map
(Part 8): Nhận Motion Alarm Notifications trong Slack
(Part 9): Điều khiển thiết bị trong nhà bằng Slack

Tham khảo: Codingo

Comments

linhkienbachkhoa

Comments