MATLAB Answers

Arduino built in example "WriteMultipleFields" gets error code -301

52 views (last 30 days)
Jonathan Baker
Jonathan Baker on 6 Jul 2020 at 21:02
Edited: Vinod on 2 Aug 2020 at 17:26
I am using an Arduino Uno R3 board and Ethernet shield. I replaced the Channel ID and the write API key with my own in the secrets.h file.
It connects with DHCP ok.
Arduino IDE 1.8.12
But comes back with error code -301. Serial Monitor:
Initialize Ethernet with DHCP:
DHCP assigned IP
Problem updating channel. HTTP error code -301
What am I missing?
Description: Writes values to fields 1,2,3 and 4 in a single ThingSpeak update every 20 seconds.
Hardware: Arduino Ethernet
!!! IMPORTANT - Modify the secrets.h file for this project with your network connection and ThingSpeak channel details. !!!
- Requires the Ethernet library
ThingSpeak ( ) is an analytic IoT platform service that allows you to aggregate, visualize, and
analyze live data streams in the cloud. Visit to sign up for a free account and create a channel.
Documentation for the ThingSpeak Communication Library for Arduino is in the folder where the library was installed.
See for the full ThingSpeak documentation.
For licensing information, see the accompanying license file.
Copyright 2018, The MathWorks, Inc.
#include "ThingSpeak.h"
#include <Ethernet.h>
#include "secrets.h"
byte mac[] = SECRET_MAC;
// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(10, 10, 1, 76);
IPAddress myDns(10, 10, 1, 1);
EthernetClient client;
unsigned long myChannelNumber = SECRET_CH_ID;
const char * myWriteAPIKey = SECRET_WRITE_APIKEY;
// Initialize our values
int number1 = 0;
int number2 = random(0,100);
int number3 = random(0,100);
int number4 = random(0,100);
void setup() {
Ethernet.init(10); // Most Arduino Ethernet hardware
Serial.begin(115200); //Initialize serial
// start the Ethernet connection:
Serial.println("Initialize Ethernet with DHCP:");
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// Check for Ethernet hardware present
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
while (true) {
delay(1); // do nothing, no point running without Ethernet hardware
if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Ethernet cable is not connected.");
// try to congifure using IP address instead of DHCP:
Ethernet.begin(mac, ip, myDns);
} else {
Serial.print(" DHCP assigned IP ");
// give the Ethernet shield a second to initialize:
ThingSpeak.begin(client); // Initialize ThingSpeak
void loop() {
// set the fields with the values
ThingSpeak.setField(1, number1);
ThingSpeak.setField(2, number2);
ThingSpeak.setField(3, number3);
ThingSpeak.setField(4, number4);
// write to the ThingSpeak channel
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if(x == 200){
Serial.println("Channel update successful.");
Serial.println("Problem updating channel. HTTP error code " + String(x));
// change the values
if(number1 > 99){
number1 = 0;
number2 = random(0,100);
number3 = random(0,100);
number4 = random(0,100);
delay(20000); // Wait 20 seconds to update the channel again


Show 2 older comments
Vinod on 9 Jul 2020 at 13:31
We investigated this on our end and are unable to reproduce what you see. It appears to be some kind of connectivity issue on your device. Perhaps the IP address is clashing with some other device on the network. Do you see this printed in the serial console?
"Failed to configure Ethernet using DHCP"
If so, try different IP addresses. You will neet to log in to your gateway ( and find an IP address that is not used. If the connection is successful, you should be able to see the new connection from your device in the gateway/router's page.
Jonathan Baker
Jonathan Baker on 24 Jul 2020 at 19:25
No, as in the original post, it connects OK with DHCP and gives out a DHCP address fine. What are the 'entries' in the channel stats page, though? Is that one way to confirm data being received?
Vinod on 28 Jul 2020 at 15:39
You can go to the Channel's Data Import/Export tab and download all historical data. If you see the number of entries increasing, it most likely points to a data encoding issue in what is being sent to ThingSpeak. You should be able to see that when you download the CSV file from the import/export tab.

Sign in to comment.

Answers (1)

Vinod on 2 Aug 2020 at 17:25
Edited: Vinod on 2 Aug 2020 at 17:26
Have you made sure you're using the latest version of the library? Are you unable to see channel updates with the examples that ship with the library?


Sign in to comment.