From 70ccd26c756cab6b4c03722e527e702b9b1c5aee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Chyrzy=C5=84ski?= Date: Sun, 7 Feb 2021 10:13:22 +0100 Subject: [PATCH] Add support for Arduino Nano 33 IoT (SAMD) (#5) * fix compilation errors * add support for Nano 33 IoT * bump up version, update link in README.md --- README.md | 3 ++ examples/nano33iot/nano33iot.ino | 52 ++++++++++++++++++++++++++++++++ examples/sensor/sensor.ino | 8 ++--- library.properties | 2 +- src/HAMqtt.cpp | 7 ++--- src/HAMqtt.h | 5 ++- src/device-types/HASensor.cpp | 4 +++ 7 files changed, 69 insertions(+), 12 deletions(-) create mode 100644 examples/nano33iot/nano33iot.ino diff --git a/README.md b/README.md index 4353b76..1fbe72e 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ but I successfully use it on ESP8266/ESP8255 boards in my projects. * [Multi-state button](examples/multi-state-button/multi-state-button.ino) * [Sensor (temperature, humidity, etc.)](examples/sensor/sensor.ino) * [NodeMCU Wi-Fi](examples/nodemcu/nodemcu.ino) +* [Arduino Nano 33 IoT Wi-Fi (SAMD)](examples/nano33iot/nano33iot.ino) +* [Availability feature](examples/availability) ## Tested boards @@ -28,6 +30,7 @@ but I successfully use it on ESP8266/ESP8255 boards in my projects. * NodeMCU * ESP-01 * Generic ESP8266/ESP8255 +* Arduino Nano 33 IoT (SAMD) ## Tested Arduino Shields diff --git a/examples/nano33iot/nano33iot.ino b/examples/nano33iot/nano33iot.ino new file mode 100644 index 0000000..0524847 --- /dev/null +++ b/examples/nano33iot/nano33iot.ino @@ -0,0 +1,52 @@ +#include +#include + +#define LED_PIN 9 +#define BROKER_ADDR IPAddress(192,168,0,17) +#define WIFI_SSID "MyNetwork" +#define WIFI_PASSWORD "MyPassword" + +WiFiClient client; +HADevice device; +HAMqtt mqtt(client, device); +HASwitch led("led", false, mqtt); // you can use custom name in place of "led" + +void onSwitchStateChanged(bool state, HASwitch* s) +{ + digitalWrite(LED_PIN, (state ? HIGH : LOW)); +} + +void setup() { + Serial.begin(9600); + Serial.println("Starting..."); + + // Unique ID must be set! + byte mac[WL_MAC_ADDR_LENGTH]; + WiFi.macAddress(mac); + device.setUniqueId(mac, sizeof(mac)); + + pinMode(LED_PIN, OUTPUT); + digitalWrite(LED_PIN, LOW); + + // connect to wifi + WiFi.begin(WIFI_SSID, WIFI_PASSWORD); + while (WiFi.status() != WL_CONNECTED) { + Serial.print("."); + delay(500); // waiting for the connection + } + Serial.println(); + Serial.println("Connected to the network"); + + // set device's details (optional) + device.setName("Nano 33 IoT"); + device.setSoftwareVersion("1.0.0"); + + // handle switch state + led.onStateChanged(onSwitchStateChanged); + + mqtt.begin(BROKER_ADDR); +} + +void loop() { + mqtt.loop(); +} diff --git a/examples/sensor/sensor.ino b/examples/sensor/sensor.ino index 421c055..c8a029d 100644 --- a/examples/sensor/sensor.ino +++ b/examples/sensor/sensor.ino @@ -14,11 +14,11 @@ HAMqtt mqtt(client, device); /** * Supported data types: * - uint8_t - * - uint16_t (unsigned int) - * - uint32_t (unsigned long) + * - uint16_t + * - uint32_t * - int8_t - * - int16_t (int) - * - int32_t (long) + * - int16_t + * - int32_t * - double * - float */ diff --git a/library.properties b/library.properties index aa8dbde..d9d0eac 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=home-assistant-integration -version=1.1.0 +version=1.1.1 author=Dawid Chyrzynski maintainer=Dawid Chyrzynski sentence=Home Assistant MQTT integration for Arduino diff --git a/src/HAMqtt.cpp b/src/HAMqtt.cpp index 9c9857c..f83de01 100644 --- a/src/HAMqtt.cpp +++ b/src/HAMqtt.cpp @@ -1,4 +1,3 @@ -#include #include #include "HAMqtt.h" @@ -24,13 +23,13 @@ static const char* DefaultDiscoveryPrefix = "homeassistant"; static HAMqtt* instance = nullptr; -void onMessageReceived(char* topic, uint8_t* payload, uint16_t length) +void onMessageReceived(char* topic, uint8_t* payload, unsigned int length) { - if (instance == nullptr) { + if (instance == nullptr || length > UINT16_MAX) { return; } - instance->processMessage(topic, payload, length); + instance->processMessage(topic, payload, static_cast(length)); } HAMqtt::HAMqtt(Client& netClient, HADevice& device) : diff --git a/src/HAMqtt.h b/src/HAMqtt.h index 5225ddf..1450b12 100644 --- a/src/HAMqtt.h +++ b/src/HAMqtt.h @@ -1,10 +1,9 @@ #ifndef AHA_HAMQTT_H #define AHA_HAMQTT_H -#include +#include +#include -class IPAddress; -class Client; class PubSubClient; class HADevice; class BaseDeviceType; diff --git a/src/device-types/HASensor.cpp b/src/device-types/HASensor.cpp index 641c2c6..efafcdc 100644 --- a/src/device-types/HASensor.cpp +++ b/src/device-types/HASensor.cpp @@ -1,3 +1,7 @@ +#ifdef ARDUINO_ARCH_SAMD +#include +#endif + #include "HASensor.h" #include "../ArduinoHADefines.h" #include "../HAMqtt.h"