Updated to ArduinoJson 6

This commit is contained in:
jptrsn 2019-03-19 18:03:51 -04:00
parent 2d9035e441
commit c1b427c5b6
3 changed files with 37 additions and 34 deletions

View File

@ -28,10 +28,10 @@ extern "C" {
#include "BLEBeacon.h"
#include "BLEEddystoneTLM.h"
#include "BLEEddystoneURL.h"
#include "Settings_kitchen.h"
#include "Settings_a.h"
BLEScan* pBLEScan;
int scanTime = 3; //In seconds
int scanTime = 10; //In seconds
int waitTime = scanInterval; //In seconds
bool updateInProgress = false;
@ -89,7 +89,9 @@ float calculateDistance(int rssi, int txPower) {
void connectToWifi() {
Serial.println("Connecting to WiFi...");
WiFi.begin(ssid, password);
WiFi.setHostname(hostname);
bool resp = WiFi.setHostname(hostname);
Serial.print("set host name result\t");
Serial.println(resp);
}
void connectToMqtt() {
@ -105,8 +107,10 @@ void WiFiEvent(WiFiEvent_t event) {
switch(event) {
case SYSTEM_EVENT_STA_GOT_IP:
digitalWrite(LED_BUILTIN, !LED_ON);
Serial.println("IP address: ");
Serial.print("IP address: \t");
Serial.println(WiFi.localIP());
Serial.print("Hostname: \t");
Serial.println(WiFi.getHostname());
connectToMqtt();
break;
case SYSTEM_EVENT_STA_DISCONNECTED:
@ -134,7 +138,7 @@ void onMqttConnect(bool sessionPresent) {
Serial.print("Session present: ");
Serial.println(sessionPresent);
if (mqttClient.publish(availabilityTopic, 0, 0, "CONNECTED") == true) {
if (mqttClient.publish(availabilityTopic, 0, 1, "CONNECTED") == true) {
Serial.print("Success sending message to topic:\t");
Serial.println(availabilityTopic);
} else {
@ -156,8 +160,7 @@ void reportDevice(BLEAdvertisedDevice advertisedDevice) {
// Serial.printf("\n\n");
StaticJsonBuffer<500> JSONbuffer;
JsonObject& JSONencoder = JSONbuffer.createObject();
StaticJsonDocument<500> doc;
String mac_address = advertisedDevice.getAddress().toString().c_str();
mac_address.replace(":","");
@ -165,17 +168,17 @@ void reportDevice(BLEAdvertisedDevice advertisedDevice) {
int rssi = advertisedDevice.getRSSI();
float distance;
JSONencoder["id"] = mac_address;
JSONencoder["uuid"] = mac_address;
JSONencoder["rssi"] = rssi;
doc["id"] = mac_address;
doc["uuid"] = mac_address;
doc["rssi"] = rssi;
if (advertisedDevice.haveName()){
String nameBLE = String(advertisedDevice.getName().c_str());
// Serial.print("Name: ");
// Serial.println(nameBLE);
JSONencoder["name"] = nameBLE;
doc["name"] = nameBLE;
// } else {
// JSONencoder["name"] = "unknown";
// doc["name"] = "unknown";
}
// Serial.printf("\n\n");
@ -191,7 +194,7 @@ void reportDevice(BLEAdvertisedDevice advertisedDevice) {
oBeacon.setData(strServiceData);
// Serial.printf("Eddystone Frame Type (Eddystone-URL) ");
// Serial.printf(oBeacon.getDecodedURL().c_str());
JSONencoder["url"] = oBeacon.getDecodedURL().c_str();
doc["url"] = oBeacon.getDecodedURL().c_str();
} else if (cServiceData[0]==0x20) {
BLEEddystoneTLM oBeacon = BLEEddystoneTLM();
@ -230,28 +233,28 @@ void reportDevice(BLEAdvertisedDevice advertisedDevice) {
int major = ENDIAN_CHANGE_U16(oBeacon.getMajor());
int minor = ENDIAN_CHANGE_U16(oBeacon.getMinor());
JSONencoder["major"] = major;
JSONencoder["minor"] = minor;
doc["major"] = major;
doc["minor"] = minor;
JSONencoder["uuid"] = proximityUUID;
JSONencoder["id"] = proximityUUID + "-" + String(major) + "-0";
JSONencoder["txPower"] = oBeacon.getSignalPower();
JSONencoder["distance"] = distance;
doc["uuid"] = proximityUUID;
doc["id"] = proximityUUID + "-" + String(major) + "-0";
doc["txPower"] = oBeacon.getSignalPower();
doc["distance"] = distance;
Serial.printf("iBeacon Frame\n");
Serial.printf("Major: %d Minor: %d UUID: %s Power: %d Rssi: %d Distance: %f\n",ENDIAN_CHANGE_U16(oBeacon.getMajor()),ENDIAN_CHANGE_U16(oBeacon.getMinor()),proximityUUID.c_str(),oBeacon.getSignalPower(), rssi, distance);
// Serial.printf("iBeacon Frame\n");
// Serial.printf("Major: %d Minor: %d UUID: %s Power: %d Rssi: %d Distance: %f\n",ENDIAN_CHANGE_U16(oBeacon.getMajor()),ENDIAN_CHANGE_U16(oBeacon.getMinor()),proximityUUID.c_str(),oBeacon.getSignalPower(), rssi, distance);
} else {
if (advertisedDevice.haveTXPower()) {
distance = calculateDistance(rssi, advertisedDevice.getTXPower());
JSONencoder["txPower"] = advertisedDevice.getTXPower();
doc["txPower"] = advertisedDevice.getTXPower();
} else {
distance = calculateDistance(rssi, -59);
}
JSONencoder["distance"] = distance;
doc["distance"] = distance;
// Serial.printf("strManufacturerData: %d \n",strManufacturerData.length());
// TODO: parse manufacturer data
@ -261,11 +264,11 @@ void reportDevice(BLEAdvertisedDevice advertisedDevice) {
if (advertisedDevice.haveTXPower()) {
distance = calculateDistance(rssi, advertisedDevice.getTXPower());
JSONencoder["txPower"] = advertisedDevice.getTXPower();
JSONencoder["distance"] = distance;
doc["txPower"] = advertisedDevice.getTXPower();
doc["distance"] = distance;
} else {
distance = calculateDistance(rssi, -59);
JSONencoder["distance"] = distance;
doc["distance"] = distance;
}
// Serial.printf("no Beacon Advertised ServiceDataUUID: %d %s \n", advertisedDevice.getServiceDataUUID().bitSize(), advertisedDevice.getServiceDataUUID().toString().c_str());
@ -273,11 +276,11 @@ void reportDevice(BLEAdvertisedDevice advertisedDevice) {
}
char JSONmessageBuffer[512];
JSONencoder.printTo(JSONmessageBuffer, sizeof(JSONmessageBuffer));
serializeJson(doc, JSONmessageBuffer);
String publishTopic = String(channel) + "/" + room;
if (mqttClient.connected() && JSONencoder["distance"] < maxDistance) {
if (mqttClient.connected() && doc["distance"] < maxDistance) {
if (mqttClient.publish((char *)publishTopic.c_str(), 0, 0, JSONmessageBuffer) == true) {
// Serial.print("Success sending message to topic: "); Serial.println(publishTopic);
@ -323,19 +326,20 @@ void scanForDevices(void * parameter) {
// xTimerStop(mqttReconnectTimer, 0); // ensure we don't reconnect to MQTT while reconnecting to Wi-Fi
Serial.print("Scanning...\t");
BLEScanResults foundDevices = pBLEScan->start(scanTime);
Serial.printf("Scan done! Devices found: %d\t",foundDevices.getCount());
Serial.printf("Scan done! Devices found: %d\n",foundDevices.getCount());
// mqttClient.connect();
// while (!mqttClient.connected()) {
// Serial.print(".");
// vTaskDelay(10 / portTICK_PERIOD_MS);
// }
if (mqttClient.connected()) {
for (uint32_t i = 0; i < foundDevices.getCount(); i++) {
if (mqttClient.connected()) {
reportDevice(foundDevices.getDevice(i));
}
} else {
Serial.println("Cannot report; mqtt disconnected");
}
last = millis();
Serial.println("Reports sent");
last = millis();
}
}
}

View File

@ -36,7 +36,6 @@
// Define bluetooth scan parameters
#define scanInterval 2 // Define the interval in seconds between scans
#define advertisementDuration 3 // Define the duration in seconds that the device should advertise as a beacon to other sensors
// Maximum distance (in meters) to report. Devices that are calculated to be further than this distance in meters will not be reported
#define maxDistance 5

View File

@ -15,6 +15,6 @@ src_dir = .
platform = espressif32
framework = arduino
board = esp32dev
lib_deps = ArduinoJSON@5.13.4, ESP32 BLE Arduino, AsyncMqttClient@0.8.2, AsyncTCP
lib_deps = ArduinoJSON^6, ESP32 BLE Arduino, AsyncMqttClient@0.8.2, AsyncTCP
board_build.partitions = partitions_singleapp.csv
upload_port = COM13