|
EnigmaIOT
0.9.8
Secure sensor and gateway platform based on ESP8266 and ESP32
|
Go to the documentation of this file.
14 #include <CayenneLPP.h>
17 #include <ESP8266WiFi.h>
18 #include <ESP8266HTTPClient.h>
19 #include <ESP8266httpUpdate.h>
20 #include <ESPAsyncTCP.h>
27 #include <driver/adc.h>
30 #include "soc/rtc_cntl_reg.h"
32 #include <ArduinoJson.h>
33 #include <Curve25519.h>
34 #include <ESPAsyncWebServer.h>
35 #include <ESPAsyncWiFiManager.h>
36 #include <DNSServer.h>
41 #define LED_BUILTIN 2 // ESP8266 boards normally have a LED in GPIO2
43 #define LED_BUILTIN 5 // ESP32 boards normally have a LED in GPIO2 or GPIO5
45 #endif // !LED_BUILTIN
47 #define BLUE_LED LED_BUILTIN
55 Serial.println (
"Registered");
59 Serial.printf (
"Unregistered. Reason: %d\n", reason);
69 Serial.printf (
"Data from %s\n", macstr);
77 Serial.printf (
"Command %s\n", commandStr.c_str ());
79 Serial.printf (
"Encoding: 0x%02X\n", encoding);
82 DynamicJsonDocument doc (1000);
84 memcpy (tempBuffer, buffer, length);
88 root = doc.createNestedArray ();
89 lpp.decode (tempBuffer, length, root);
90 serializeJsonPretty (doc, Serial);
93 deserializeMsgPack (doc, tempBuffer, length);
94 serializeJsonPretty (doc, Serial);
97 DEBUG_WARN (
"Non supported encoding; %d", encoding);
103 Serial.begin (115200); Serial.println (); Serial.println ();
104 time_t start = millis ();
109 WRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0);
122 if (wifi_get_macaddr (STATION_IF, macAddress))
124 if ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))
129 DEBUG_DBG (
"Node address set to %s",
mac2str (macAddress, macStr));
131 DEBUG_WARN (
"Node address error");
135 const size_t capacity = JSON_OBJECT_SIZE (5);
136 DynamicJsonDocument json (capacity);
139 json[
"V"] = (float)(ESP.getVcc ()) / 1000;
141 json[
"V"] = (float)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096);
148 int len = measureMsgPack (json) + 1;
149 uint8_t* buffer = (uint8_t*)malloc (len);
150 len = serializeMsgPack (json, (
char*)buffer, len);
153 Serial.printf (
"Vcc: %f\n", (
float)(ESP.getVcc ()) / 1000);
155 Serial.printf (
"Vcc: %f\n", (
float)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));
157 Serial.printf (
"Message Len %d\n", len);
160 Serial.printf (
"Trying to send: %s\n",
printHexBuffer (buffer, len));
164 Serial.println (
"---- Error sending data");
166 Serial.println (
"---- Data sent");
168 Serial.printf (
"Total time: %lu ms\n", millis () - start);
static const size_t ENIGMAIOT_ADDR_LEN
Address size. Mac address = 6 bytes.
nodeMessageType
Message code definition.
static const uint8_t MAX_MESSAGE_LENGTH
Maximum payload size on ESP-NOW.
static const int MAX_DATA_PAYLOAD_SIZE
Maximun payload size for data packets.
void setResetPin(int pin)
Sets a pin to be used to reset configuration it it is connected to ground during startup.
void processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t encoding)
void handle()
This method should be called periodically for instance inside loop() function. It is used for interna...
void connectEventHandler()
char * printHexBuffer(const uint8_t *buffer, uint16_t len)
Debug helper function that generates a string that represent a buffer hexadecimal values.
EnigmaIOTNodeClass EnigmaIOTNode
void sleep()
Requests transition to sleep mode (low energy state)
void onDisconnected(onDisconnected_t handler)
Defines a function callback that will be called everytime node is disconnected from gateway.
bool sendData(const uint8_t *data, size_t len, dataMessageType_t dataMsgType, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)
Initiades data transmission distinguissing if it is payload or control data.
Library to build a node for EnigmaIoT system.
void onConnected(onConnected_t handler)
Defines a function callback that will be called everytime node is registered on gateway.
void begin(Comms_halClass *comm, uint8_t *gateway=NULL, uint8_t *networkKey=NULL, bool useCounter=true, bool sleepy=true)
Initalizes communication basic data and starts node registration.
void setLed(uint8_t led, time_t onTime=FLASH_LED_TIME)
Sets a LED to be flashed every time a message is transmitted.
Espnow_halClass Espnow_hal
Singleton instance of ESP-NOW class.
char * mac2str(const uint8_t *mac, char *extBuffer)
Debug helper function that generates a string that represent a MAC address.
bool setNodeAddress(uint8_t address[ENIGMAIOT_ADDR_LEN])
Set node address to be used in EnigmaIOT communication.
nodeInvalidateReason_t
Key invalidation reason definition.
void disconnectEventHandler(nodeInvalidateReason_t reason)
ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms.
void onDataRx(onNodeDataRx_t handler)
Defines a function callback that will be called on every downlink data message that is received from ...