Cayenne MQTT support for ENC28J60 and nano?


I know my hardware works to show a local LAN web page: Arduino Nano
and ENC28J60 Nano Ethernet shield. Saw an “IT WORKS” page for the
arduino nano using the old (pre-MQTT) sketch with only a token, not user
and password. Problem I am having is in the suggested sketch, there is
support for 5100 Ethernet shield, etc but not for the ENC28J60.

Will there be any support for this little shield? Is there a way I can modify
say a 5100 sketch and make this work?

This was all discussed pre-MQTT Arduino requirements but I have not
seen a solution for the new MQTT interface.

Thoughts? Ideas?


@kreggly can help you with this.


I don’t have one, and I don’t see a UIP MQTT header in the new Cayenne MQTT library.

It has got to be possible, just someone needs to look into what is going on in BlynkSimpleUIPEthernet and create the same for MQTT.




This basic sketch should work for the ENC28J60 but it’s just a bit too big for a Nano or a Uno. The UIP library is a pig like most of the Wifi shields. Compiles fine for the Mega.



 * For this example you need UIPEthernet library:
 * Typical wiring would be:
 *  VCC -- 5V
 *  GND -- GND
 *  CS  -- D10
 *  SI  -- D11
 *  SCK -- D13
 *  SO  -- D12
 *  INT -- D2
#define CAYENNE_DEBUG         // Uncomment to show debug messages
#define CAYENNE_PRINT Serial  // Comment this out to disable prints and save space

#include <UIPEthernet.h>
#include <CayenneMQTTEthernetClient.h>

// Cayenne authentication info. This should be obtained from the Cayenne Dashboard.
char username[] = "MQTT_USERNAME";
char password[] = "MQTT_PASSWORD";
char clientID[] = "CLIENT_ID";

void setup() {
  Cayenne.begin(username, password, clientID);

void loop() {

// Default function for sending sensor data at intervals to Cayenne.
// You can also use functions for specific channels, e.g CAYENNE_OUT(1) for sending channel 1 data.
  // Write data to Cayenne here. This example just sends the current uptime in milliseconds on virtual channel 0.
  Cayenne.virtualWrite(0, millis());
  // Some examples of other functions you can use to send data.
  //Cayenne.celsiusWrite(1, 22.0);
  //Cayenne.luxWrite(2, 700);
  //Cayenne.virtualWrite(3, 50, TYPE_PROXIMITY, UNIT_CENTIMETER);

// Default function for processing actuator commands from the Cayenne Dashboard.
// You can also use functions for specific channels, e.g CAYENNE_IN(1) for channel 1 commands.
  CAYENNE_LOG("Channel %u, value %s",, getValue.asString());
  //Process message here. If there is an error set an error message using getValue.setError(), e.g getValue.setError("Error message");