Arduino library for the Adafruit FONA

Overview

Adafruit FONA LibraryBuild StatusDocumentation

This library requires Arduino v1.0.6 or higher

This is a library for the Adafruit FONA Cellular GSM Breakouts etc

Designed specifically to work with the Adafruit FONA Breakout

These modules use TTL Serial to communicate, 2 pins are required to interface

Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit!

Check out the links above for our tutorials and wiring diagrams

Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution With updates from Samy Kamkar

To download. click the DOWNLOADS button in the top right corner, rename the uncompressed folder Adafruit_FONA Check that the Adafruit_FONA folder contains Adafruit_FONA.cpp and Adafruit_FONA.h

Place the Adafruit_FONA library folder your arduinosketchfolder/libraries/ folder. You may need to create the libraries subfolder if its your first library. Restart the IDE.

Comments
  • Support for sending USSD messages.

    Support for sending USSD messages.

    This PR adds support for sending Unstructured Supplementary Service Data messages. USSD messages can, for example, be used by prepaid plans to query the available balance (ex: #999# on T-mobile etc.).

    The example is also updated and adds a new option under u. USSD answers from the network usually come immediately, and are displayed in the same fashion as an SMS.

    I implemented this to use with the still in alpha Thingconnect service that uses USSDs to send small amounts of data over GSM for IoT projects.

    opened by JelmerT 10
  • Library re-organization and minor edits

    Library re-organization and minor edits

    Have re-organized the library to allow for easy porting to different platforms. No changes have been brought to the API or functionality, and all the examples are left completely untouched and compile/run fine. The main purpose was to segregate the deeply Arduino/AVR-specific details in their own area, as this will make implementing the functionality on various platforms (e.g. those without support for PROGMEM) much easier.

    In addition, a number of small modifications were made to make the source lighter (e.g. replacing all the ADAFRUIT_FONA_DEBUG #ifdefs with a set of compile-time selected macros) and reduce the memory load by maximizing use of flash strings (not by much, but 4% on a Duemilanove can make a difference).

    I'm hoping this pull will be merged, such that I can do some work to get this working on some non-standard Arduino compatibles, for starters.

    opened by psychogenic 9
  • Make UDP methods

    Make UDP methods

    I miss UDP functionality in the library, I am coding it myself right now but I am facing a little dilema.

    Most TCP methods are the same as the UDP ones, all the same code for sending, closing etc.. Just the connection part is different, where one needs a "TCP" parameter when opening a connection with the server and the other a "UDP".

    I think the correct thing to do is to rename the TCP methods to TCPIP or something similar and let then be generic and the user selects if it's supposed to be TCP or UDP. The problem with this is breaking legacy code compatibility.

    So what do you think it's best:

    1- To add new methods for UDP, being just a copy of the TCP ones (with the exception of the connect method).

    2- Make generic methods that will handle both TCP and UDP and erase the current TCP methods, which can lead to problems in older codes.

    3- Do option 2 but keep the old TCP methods, marked as legacy code, to prevent breaking old code functionality. personally think option 3 is the one to go.

    opened by feinstein 8
  • SIM7070 fails when adding body to HTTP POST

    SIM7070 fails when adding body to HTTP POST

    • Arduino board: [Waveshare SIM7070G Cat-M/NB-IoT/GPRS HAT](SIM7070G Cat-M/NB-IoT/GPRS HAT)

    • Platform.io

    Version: 1.55.0 Commit: c185983a683d14c396952dd432459097bc7f757f Date: 2021-03-30T16:01:05.981Z (1 wk ago) Electron: 11.3.0 Chrome: 87.0.4280.141 Node.js: 12.18.3 V8: 8.7.220.31-electron.0 OS: Darwin x64 18.7.0

    • Steps to Repro. Sketch attached. Uses the Adafruit_FONA library and based on the examples provided for Http POST.

    Hello Gents,

    First off, I'd like to give a very greatful thank you to the library writers for doing this. There's no way I would have gotten as far as I would have without this very helpful repo. Thank you.

    Using the example sketches provided with the library to do an HTTP POST. A POST operation works (needed to add some delay commands for SIM7070) but when I add a body to the POST, the POST fails.

    In particular, here are the commands to add the body post.

    void addBodyToPost()
    {
      // Sending plan text and wait one second, b/c I've seen that in other tutorials
      fona.HTTP_addHeader("Content-Type", "text/plain", 10);
      delay(1000);
    
      fona.HTTP_addHeader("Host", "b225f0b114f9.ngrok.io", 21);
      delay(1000);
    
      fona.HTTP_addHeader("User-Agent", "IOE Client", 10);
      delay(1000);
    
    
      // Add the SHBOD.  It will return a ">" when it is ready for data
      char cmdBuff[150];
      char body[] = {"foo"};
      int bodySize = sizeof(body) / sizeof(body[0]);
    
      // Format your command and wait up to 2 seconds for SIM7070 to respond
      sprintf(cmdBuff, "AT+SHBOD=%i,10000", bodySize);
      fona.getReply(cmdBuff, 2000);
    
      // If you get a reply, hope it's a prompt
      if (strstr(fona.replybuffer, ">") == NULL)
        Serial.println("No > in reply buffer");
    
      // Send the data to the module and wait for OK
      if (!fona.sendCheckReply(body, "OK", 2000))
        Serial.println("No OK in reply buffer.");
    
      // Data added!  Ha.  That's what they WANT you to think.
    }
    

    Here is the entire sketch below. This was modified slightly from the ESP32 example. Again, everything works perfectly when I comment out the "addBodyToPost" function.

    #include <Arduino.h>
    #include "Adafruit_FONA.h" // https://github.com/botletics/SIM7000-LTE-Shield/tree/master/Code
    
    #define SIMCOM_7070 // I'm using one of these
    
    #define FONA_PWRKEY 18
    #define FONA_RST 5
    #define FONA_TX 16 // ESP32 hardware serial RX2 (GPIO16)
    #define FONA_RX 17 // ESP32 hardware serial TX2 (GPIO17)
    
    // For ESP32 hardware serial
    #include <HardwareSerial.h>
    HardwareSerial fonaSS(1);
    
    // The fona library.  Excellent!
    Adafruit_FONA_LTE fona = Adafruit_FONA_LTE();
    
    void addBodyToPost()
    {
      // Sending plan text and wait one second, b/c I've seen that in other tutorials
      fona.HTTP_addHeader("Content-Type", "text/plain", 10);
      delay(1000);
    
      fona.HTTP_addHeader("Host", "b225f0b114f9.ngrok.io", 21);
      delay(1000);
    
      fona.HTTP_addHeader("User-Agent", "IOE Client", 10);
      delay(1000);
    
    
      // Add the SHBOD.  It will return a ">" when it is ready for data
      char cmdBuff[150];
      char body[] = {"foo"};
      int bodySize = sizeof(body) / sizeof(body[0]);
    
      // Format your command and wait up to 2 seconds for SIM7070 go respond
      sprintf(cmdBuff, "AT+SHBOD=%i,10000", bodySize);
      fona.getReply(cmdBuff, 2000);
    
      // If you get a reply, hope it's a prompt
      if (strstr(fona.replybuffer, ">") == NULL)
        Serial.println("No > in reply buffer");
    
      // Send the data to the module and wait for OK
      if (!fona.sendCheckReply(body, "OK", 2000))
        Serial.println("No OK in reply buffer.");
    
      // Data added!  Ha.  That's what they WANT you to think.
    }
    
    void postRequest()
    {
    
      addBodyToPost();
    
      // Send your reply and wait up to five seconds for the module to confirm
      fona.sendCheckReply("AT+SHREQ=\"http://b225f0b114f9.ngrok.io\",3", "OK", 5 * 1000);
    
      // Read responses for up to 10 seconds
      // Note: What's odd is that when adding a body, this fails immediately
      // Parse response status and size
      // Example reply --> "+SHREQ: "POST",200,452"
      uint16_t status, datalen;
      fona.readline(10 * 1000);
    
      // What did it return?
      DEBUG_PRINT("\t<--- ");
      DEBUG_PRINTLN(fona.replybuffer);
    
      // Did we get a status reply of 200?
      if (!fona.parseReply(F("+SHREQ: \"POST\""), &status, ',', 1))
      {
        Serial.println("Unable to get status");
        return;
      }
    
      // The moment of truth
      if (status != 200)
      {
        // D'oh ... what went wrong?
        Serial.println("No soup for you!  Failure ....");
      }
      else
      {
        // Yus!! We got a reply from the server.  Let's see what it says!
        Serial.println("Huzzah!  We have a response ...");
    
        if (!fona.parseReply(F("+SHREQ: \"POST\""), &datalen, ',', 2))
        {
          Serial.println("Unable to get data");
        }
    
        DEBUG_PRINT("HTTP status: ");
        DEBUG_PRINTLN(status);
        DEBUG_PRINT("Data length: ");
        DEBUG_PRINTLN(datalen);
    
        // Read server response
        fona.getReply(F("AT+SHREAD=0,"), datalen, 10000);
        fona.readline();
        DEBUG_PRINT("\t<--- ");
        DEBUG_PRINTLN(fona.replybuffer); // +SHREAD: <datalen>
        fona.readline(10000);
        DEBUG_PRINT("\t<--- ");
        DEBUG_PRINTLN(fona.replybuffer); // Print out server reply
      }
    }
    
    void setup()
    {
    
      pinMode(FONA_RST, OUTPUT);
      digitalWrite(FONA_RST, HIGH); // Default state
    
      fona.powerOn(FONA_PWRKEY); // Power on the module
    
      Serial.begin(9600);
      Serial.println(F("ESP32 SIMCom Basic Test"));
      Serial.println(F("Initializing....(May take several seconds)"));
    
      fonaSS.begin(115200, SERIAL_8N1, FONA_TX, FONA_RX); // baud rate, protocol, ESP32 RX pin, ESP32 TX pin
    
      Serial.println(F("Configuring to 9600 baud"));
      fonaSS.println("AT+IPR=9600");                    // Set baud rate
      delay(100);                                       // Short pause to let the command run
      fonaSS.begin(9600, SERIAL_8N1, FONA_TX, FONA_RX); // Switch to 9600
      if (!fona.begin(fonaSS))
      {
        Serial.println(F("Couldn't find FONA"));
        while (1)
          ; // Don't proceed if it couldn't find the device
      }
    
      uint8_t type = fona.type();
      Serial.println(F("FONA is OK"));
      Serial.print(F("Found "));
      switch (type)
      {
      case SIM7070:
        Serial.println(F("SIM7070"));
        break;
      }
    
      // Print module IMEI number.
      char imei[16] = {0};
      uint8_t imeiLen = fona.getIMEI(imei);
      if (imeiLen > 0)
      {
        Serial.print("Module IMEI: ");
        Serial.println(imei);
      }
    
      // Set modem to full functionality
      fona.setFunctionality(1);               // AT+CFUN=1
      fona.setNetworkSettings(F("hologram")); // For Hologram SIM card
      fona.setPreferredMode(38);              // Use LTE only, not 2G
      fona.setPreferredLTEMode(1);            // Use LTE CAT-M only, not NB-IoT
    
      int attemptCount = 0;
      while (!fona.getNetworkInfo())
      {
        delay(1000);
        attemptCount++;
        if (attemptCount == 10)
        {
          ESP.restart();
        }
      }
    
      // Attempt to turn on data
      attemptCount = 0;
      while (!fona.enableGPRS(true))
      {
        delay(1000);
        attemptCount++;
        if (attemptCount == 10)
        {
          ESP.restart();
        }
      }
    
      char url[] = {"http://b225f0b114f9.ngrok.io"};
      fona.HTTP_connect(url);
    
      postRequest();
    
      fona.getReply("AT+SHDISC", 10000); // Disconnect HTTP
    
      delay(10 * 1000);
      ESP.restart();
    }
    
    void loop(){};
    

    This code gives me the output below:

    ESP32 SIMCom Basic Test Initializing....(May take several seconds) Configuring to 9600 baud Attempting to open comm with ATs ---> AT <--- AT ---> AT <--- AT ---> ATE0 <--- ATE0 ---> ATE0 <--- OK ---> AT+GMR <--- Revision:1951B03SIM7070

    OK

        ---> AT+CPMS="SM","SM","SM"
        <--- +CPMS: 0,10,0,10,0,10
    

    FONA is OK Found SIM7070 ---> AT+GSN <--- 869777041783823 Module IMEI: 869777041783823 ---> AT+CFUN=1 <--- OK ---> AT+CGDCONT=1,"IP","hologram" <--- OK ---> AT+CNMP=38 <--- OK ---> AT+CMNB=1 <--- OK ---> AT+CPSI? <--- +CPSI: LTE CAT-M1,Online,310-410,0x3A85,46161679,402,EUTRAN-BAND12,5110,3,3,-17,-80,-50,11 OK replyOK ---> AT+CNACT=0,1 <--- OK <--- +APP PDP: 0,ACTIVE ---> AT+CNACT? <--- +CNACT: 0,1,"10.155.118.146" ---> AT+SHCONF="URL","http://b225f0b114f9.ngrok.io" <--- OK ---> AT+SHCONF="BODYLEN",1024 <--- OK ---> AT+SHCONF="HEADERLEN",350 <--- OK ---> AT+SHCONN <--- OK ---> AT+SHSTATE? <--- +SHSTATE: 1 ---> AT+SHCHEAD <--- OK ---> AT+SHAHEAD="Content-Type","text/plain" <--- OK ---> AT+SHAHEAD="Host","b225f0b114f9.ngrok.io" <--- OK ---> AT+SHAHEAD="User-Agent","IOE Client" <--- OK ---> AT+SHBOD=4,10000 <--- > ---> foo <--- OK ---> AT+SHREQ="http://b225f0b114f9.ngrok.io",3 <--- OK Unable to get status ---> AT+SHDISC <--- AT+SHDISC

    Any ideas on what's going wrong?

    I've tried with and without headers. I've tried with varying SHBOD lengths (i.e. AT+SHBOD=3,... instead of AT_SHBOD=4). No luck.

    opened by KnightOfNih 4
  • getNumSMS failed with FONA 800 uFL

    getNumSMS failed with FONA 800 uFL

    Recently purchased a module and found that:

        if (! sendParseReply(F("AT+CPMS?"), F("\"SM\","), &numsms) ) return -1;
      } else {
        if (! sendParseReply(F("AT+CPMS?"), F("+CPMS: \"SM_P\","), &numsms) ) return -1;
      }
    

    https://github.com/adafruit/Adafruit_FONA_Library/blob/master/Adafruit_FONA.cpp#L483

    needs to be changed to:

        if (! sendParseReply(F("AT+CPMS?"), F("\"SM\","), &numsms) ) return -1;
      } else {
        if (! sendParseReply(F("AT+CPMS?"), F("+CPMS: \"SM\","), &numsms) ) return -1;
      }
    

    I don't know the scope of this issue or if I have a one off firmware rev on the SIM800 but might be worth looking into.

    opened by king-jam 4
  • Implement a way to get the *sender* of an SMS message.

    Implement a way to get the *sender* of an SMS message.

    It's apparently possible according to the command reference, but I'm not sure if it should be built in to Adafruit_FONA::readSMS() or a whole new method (like say boolean Adafruit_FONA::getSMSSender(uint8_t i, char *smssenderaddr).

    opened by lectroidmarc 4
  • ADAFRUIT_FONA_DEBUG now set by default?

    ADAFRUIT_FONA_DEBUG now set by default?

    Was this define set purposely or by coincidence? File: includes/FONAConfig.h

    I just updated this library via Arduino GUI and got all the debug messages....

    opened by markusk 3
  • Make DebugStream configurable

    Make DebugStream configurable

    Hi there, if i use the library with only a FONA connected, everything works good. But, as a arduino nano has only one hardware serial and i want to use that for external gps, i have to switch off debugging in FONAConfig.h. This works ofcause, but without debug informations it's difficult to program and sadly my C is not so good so i could not change the DebugStream to a SoftwareSerial my sketch creates for debugging.

    Can anybody help here?

    opened by thedarkman 3
  • Added leonardo version of test example

    Added leonardo version of test example

    Took me a while to figure out that SoftwareSerial only works on certain pins on the Leonardo (and other ATmega32U4-based Arduinos).

    I added a Leonardo version of the test example, similar to the examples in the Adafruit-GPS-Library.

    I also cleaned up a little and stripped some trailing spaces.

    opened by JelmerT 3
  • Added getSMSInterrupt/setSMSInterrupt functions to allow RI pin to interrupt upon inbound SMS

    Added getSMSInterrupt/setSMSInterrupt functions to allow RI pin to interrupt upon inbound SMS

    You can now use setSMSInterrupt() to enable/disable the RI pin to send an interrupt upon receiving an SMS. Previously, FONA would only interrupt upon receiving calls so you would need to poll for new SMS', now you can simply listen for the interrupt and tuck your microcontroller in and put it to sleep.

    opened by samyk 3
  • Allow setting of GPRS APN

    Allow setting of GPRS APN

    Added function to allow setting of the GPRS APN, username and password settings. This is required to enable GPRS functionality on mobile networks. For example, on T-Mobile (US), the APN needs to be set to "epc.tmobile.com", no username or password.

    opened by darrensi 3
  • "Fonatest" ide in arduino nano every module gives an error.

    Debug error:

    C:\Users\nmentese\Documents\Arduino\libraries\Adafruit_FONA_Library\examples\FONAtest\FONAtest.ino: In function 'void loop()': FONAtest:626:60: error: no matching function for call to 'Adafruit_FONA::enableNTPTimeSync(bool, const char [13])' if (!fona.enableNTPTimeSync(true, F("pool.ntp.org"))) ^ In file included from C:\Users\nmentese\Documents\Arduino\libraries\Adafruit_FONA_Library\examples\FONAtest\FONAtest.ino:28:0: C:\Users\nmentese\Documents\Arduino\libraries\Adafruit_FONA_Library/Adafruit_FONA.h:120:8: note: candidate: bool Adafruit_FONA::enableNTPTimeSync(bool, FONAFlashStringPtr) bool enableNTPTimeSync(bool onoff, FONAFlashStringPtr ntpserver = 0); ^~~~~~~~~~~~~~~~~ C:\Users\nmentese\Documents\Arduino\libraries\Adafruit_FONA_Library/Adafruit_FONA.h:120:8: note: no known conversion for argument 2 from 'const char [13]' to 'FONAFlashStringPtr {aka const arduino::__FlashStringHelper*}' FONAtest:778:121: error: no matching function for call to 'Adafruit_FONA::HTTP_POST_start(char [80], const char [11], uint8_t*, size_t, uint16_t*, uint16_t*)' if (!fona.HTTP_POST_start(url, F("text/plain"), (uint8_t ) data, strlen(data), &statuscode, (uint16_t )&length)) { ^ In file included from C:\Users\nmentese\Documents\Arduino\libraries\Adafruit_FONA_Library\examples\FONAtest\FONAtest.ino:28:0: C:\Users\nmentese\Documents\Arduino\libraries\Adafruit_FONA_Library/Adafruit_FONA.h:165:8: note: candidate: bool Adafruit_FONA::HTTP_POST_start(char, FONAFlashStringPtr, const uint8_t, uint16_t, uint16_t*, uint16_t*) bool HTTP_POST_start(char url, FONAFlashStringPtr contenttype, ^~~~~~~~~~~~~~~ C:\Users\nmentese\Documents\Arduino\libraries\Adafruit_FONA_Library/Adafruit_FONA.h:165:8: note: no known conversion for argument 2 from 'const char [11]' to 'FONAFlashStringPtr {aka const arduino::__FlashStringHelper}' exit status 1 no matching function for call to 'Adafruit_FONA::enableNTPTimeSync(bool, const char [13])'

    thanks in advance

    opened by sezginkrk 0
  • Support for Fona 3G boards

    Support for Fona 3G boards

    Hi team, I have a FONA 3G board https://www.adafruit.com/product/2691 It appears this library doesn't work with this board. I get a connection error and it reports in the terminal window it is unable to connect with GPRS (obviously that network is long gone). So, it looks like this library doesn't support the newer 3G boards that I have. Are you looking to add support for these 3G boards sometime soon? I was looking at getting more of them, but having issues getting this board to work with MQTT. Regards, Steve

    opened by stephenmorton 0
  • Connecting to HiveMQ MQTT Broker

    Connecting to HiveMQ MQTT Broker

    I am using a mega and Sim 7000A. I am trying to connect my device to a different MQTT broker than Adafruit IO which is HiveMQ so I can build a web application out of it. The issue I am having is that i cannot connect to the server using the libraries provided for some reason. I have tried the MQTT Demo sketch and it still gives errors when I call different methods for example

    if (! fona.MQTT_connect(true)) { Serial.println(F("Failed to connect to broker!")); }

    That would give me an error saying that the method basically does not exist in that class. Please point me in the right direction as everything looks fine except methods don't work.

    Thank you

    opened by Alfredfoby 0
  • Response of content not got

    Response of content not got

    Hi, i send these commands, the request is sending, but i do not get the response data.

    This is the code:

    fona.sendCheckReply(F("AT+CGACT?"),1000); fona.sendCheckReply(F("AT+CGCONTRDP"),1000); fona.sendCheckReply(F("AT+CHTTPCREATE=http://www.iforce2d.net/"),1000); fona.sendCheckReply(F("AT+CHTTPCON=0"),1000); fona.sendCheckReply(F("AT+CHTTPSEND=0,0,/test.php"),1000); fona.sendCheckReply(F("AT+CHTTPDISCON=0"),1000); fona.sendCheckReply(F("AT+CHTTPDESTROY=0"),1000);

    opened by roysG 0
  • replybuffer size and esp32

    replybuffer size and esp32

    • Arduino board: ESP32

    • Arduino IDE version: PlatformIO

    replybuffer size on esp32 while trying to use readLine with multiline enabled, returns a LoadForbidden as an error.

    Increasing the size to something as '4000' fixes it. image

    opened by Nathan-ma 0
Releases(1.3.11)
Arduino library to access Adafruit IO from WiFi, cellular, and ethernet modules.

Adafruit IO Arduino Library This library provides a simple device independent interface for interacting with Adafruit IO using Arduino. It allows you

Adafruit Industries 168 Dec 23, 2022
Arduino library for the Si4714 FM+RDS Transmitter in the Adafruit shop

Adafruit-Si4713-Library This is the Adafruit FM Transmitter with RDS/RBDS Breakout - Si4713 library Tested and works great with the Adafruit Si4713 Br

Adafruit Industries 19 Oct 26, 2022
Library code for Adafruit's CC3000 WiFi breakouts &c

Adafruit CC3000 Library This is a library for the Adafruit CC3000 WiFi Breakouts etc Designed specifically to work with the Adafruit CC3000 Breakout -

Adafruit Industries 267 Sep 9, 2022
Modified Firmata code to work with Adafruit's Bluefruit LE Modules

#Firmata Firmata is a protocol for communicating with microcontrollers from software on a host computer. The protocol can be implemented in firmware o

Adafruit Industries 21 May 25, 2022
Drivers for Adafruit's nRF8001 Bluetooth Low Energy Breakout

Adafruit_nRF8001 Driver and example code for Adafruit's nRF8001 Bluetooth Low Energy Breakout. PINOUT The pin locations are defined in ble_system.h, t

Adafruit Industries 106 Nov 28, 2022
Arduino Arduino library for the CloudStorage server project. The library provides easy access to server-stored values and operations.

Arduino-CloudStorage Arduino/ESP8266 library that allows you to easly store and retreive data from a remote (cloud) storage in a key/value fashion. Cl

Gil Maimon 7 Jan 30, 2022
Arduino library for making an IHC in or output module using an Arduino

Introduction This is an Arduino library for making an IHC in or output module using an Arduino. (IHC controller is a home automation controller made b

Jens Østergaard Nielsen 2 Mar 26, 2020
ArduinoIoTCloud library is the central element of the firmware enabling certain Arduino boards to connect to the Arduino IoT Cloud

ArduinoIoTCloud What? The ArduinoIoTCloud library is the central element of the firmware enabling certain Arduino boards to connect to the Arduino IoT

Arduino Libraries 64 Dec 16, 2022
The Approximate Library is a WiFi Arduino library for building proximate interactions between your Internet of Things and the ESP8266 or ESP32

The Approximate Library The Approximate library is a WiFi Arduino Library for building proximate interactions between your Internet of Things and the

David Chatting 102 Dec 7, 2022
Arduino library for controlling the MCP2515 in order to receive/transmit CAN frames.

107-Arduino-MCP2515 Arduino library for controlling the MCP2515 in order to receive/transmit CAN frames. This library is prepared to interface easily

107-Systems 51 Nov 16, 2022
Arduino library for interfacing with any GPS, GLONASS, Galileo or GNSS module and interpreting its NMEA messages.

107-Arduino-NMEA-Parser Arduino library for interfacing with any GPS, GLONASS, Galileo or GNSS module and interpreting its NMEA messages. This library

107-Systems 15 Jan 1, 2023
Arduino library for providing a convenient C++ interface for accessing UAVCAN.

107-Arduino-UAVCAN Arduino library for providing a convenient C++ interface for accessing UAVCAN (v1.0-beta) utilizing libcanard. This library works f

107-Systems 54 Jan 2, 2023
Arduino web server library.

aWOT Arduino web server library. Documentation 1. Getting started Hello World Basic routing Application generator Serving static files 2. Guide Routin

Lasse Lukkari 246 Jan 4, 2023
Arduino, esp32 and esp8266 library for ABB (ex PowerOne) Aurora Inverter, implement a full methods to retrieve data from the Inverter via RS-485

ABB Aurora protocol You can refer the complete documentation on my site ABB Aurora PV inverter library for Arduino, esp8266 and esp32 I create this li

Renzo Mischianti 22 Nov 22, 2022
Arduino library for the MCP2515 CAN Controller

MCP2515 CAN Controller Library for Arduino Compatibility with the ACAN library This library is fully compatible with the Teensy 3.x ACAN library https

Pierre Molinaro 4 Dec 18, 2022
CAN / CANFD Arduino Library for Teensy 4.0

CAN Library for Teensy 4.0 / 4.1 It handles Controller Area Network (CAN) for CAN1, CAN2 and CAN3, and Controller Area Network with Flexible Data (CAN

Pierre Molinaro 12 Dec 9, 2022
Analog Devices Analog Digital Converter AD7173 Arduino library

AD7173-Arduino Analog Devices AD7173 analog digital converter Arduino library Mostly tested setup for this library: 1007 data rate external crystal co

brain-duino 8 Nov 20, 2022
Arduino library for MQTT support

Adafruit MQTT Library Arduino library for MQTT support, including access to Adafruit IO. Works with the Adafruit FONA, Arduino Yun, ESP8266 Arduino pl

Adafruit Industries 519 Jan 6, 2023
Arduino library for SPI and I2C access to the PN532 RFID/Near Field Communication chip

Adafruit-PN532 This is a library for the Adafruit PN532 NFC/RFID breakout boards This library works with the Adafruit NFC breakout https://www.adafrui

Adafruit Industries 361 Dec 23, 2022