|
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>
40 #define LED_OFF !LED_ON
43 #define LED_BUILTIN 2 // ESP32 boards normally have a LED in GPIO2 or GPIO5
44 #endif // !LED_BUILTIN
46 #define BLUE_LED LED_BUILTIN
54 Serial.println (
"Connected");
58 Serial.printf (
"Unregistered. Reason: %d\n", reason);
68 Serial.printf (
"Data from %s --> %s\n", macstr,
printHexBuffer (buffer, length));
76 Serial.printf (
"Command %s\n", commandStr.c_str ());
78 Serial.printf (
"Encoding: 0x%02X\n", payloadEncoding);
81 DynamicJsonDocument doc (1000);
83 memcpy (tempBuffer, buffer, length);
85 switch (payloadEncoding) {
87 root = doc.createNestedArray ();
88 lpp.decode (tempBuffer, length, root);
89 serializeJsonPretty (doc, Serial);
92 deserializeMsgPack (doc, tempBuffer, length);
93 serializeJsonPretty (doc, Serial);
96 DEBUG_WARN (
"Non supported encoding; %d", payloadEncoding);
102 Serial.begin (115200); Serial.println (); Serial.println ();
107 WRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0);
123 if (wifi_get_macaddr (STATION_IF, macAddress))
125 if ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))
130 DEBUG_DBG (
"Node address set to %s",
mac2str (macAddress));
132 DEBUG_WARN (
"Node address error");
141 static const time_t PERIOD = 3000;
142 static const time_t FLASH_DURATION = 50;
148 if (clock >= 0 && clock < FLASH_DURATION) {
157 static time_t lastSensorData;
158 static const time_t SENSOR_PERIOD = 10000;
159 if (millis () - lastSensorData > SENSOR_PERIOD) {
160 lastSensorData = millis ();
164 msg.addAnalogInput (0, (
float)(ESP.getVcc ()) / 1000);
165 Serial.printf (
"Vcc: %f\n", (
float)(ESP.getVcc ()) / 1000);
167 msg.addAnalogInput (0, (
float)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));
168 Serial.printf (
"Vcc: %f\n", (
float)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));
170 msg.addTemperature (1, 20.34);
173 Serial.printf (
"Trying to send: %s\n",
printHexBuffer (msg.getBuffer (), msg.getSize ()));
176 Serial.println (
"---- Error sending data");
178 Serial.println (
"---- Data sent");
void connectEventHandler()
bool hasClockSync()
Checks if internal clock is synchronized to gateway.
void enableClockSync(bool clockSync=true)
Controls clock synchronization function.
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 handle()
This method should be called periodically for instance inside loop() function. It is used for interna...
void disconnectEventHandler(nodeInvalidateReason_t reason)
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 enableBroadcast(bool broadcast=true)
Enables node broadcast mode. Node will request broadcast key to Gateway. When it is received node wil...
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.
bool isRegistered()
Checks if node is registered.
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.
Espnow_halClass Espnow_hal
Singleton instance of ESP-NOW class.
void processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)
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.
int64_t clock()
Gets current clock counter. millis() + offset.
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 ...