Serial Communication (Arduino-Esp8266)

Hello everyone,

Im having some issues with a schoolproject. I am using a pixy2 to scan barcodes, my arduino reads this and sends this data to a servo driverboard. I have to put this data on a site to so i use an esp8266 (nodemcu).

I am sending the data to the esp8266 with serial communication (RX and TX pins). But this doesn't really work out.

This is the program im using the first one is the arduino this works fine.

This code is attached to the post

The second program is the one of the esp8266, this is the one that doesn't work, I don't know how to use data from serial monitor in a if statement.

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <SoftwareSerial.h>

// Update these with values suitable for your network.

const char* ssid = "draadloos";
const char* password = "onlyandonly6tea";
const char* mqtt_server = "broker.hivemq.com";

SoftwareSerial s(D6,D5);
WiFiClient espClient;
PubSubClient client(espClient);

unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];

int value = 0;
int data;
int data1;



void setup_wifi() {

 delay(10);
  //We start by connecting to a WiFi network
 Serial.println();
 Serial.print("Connecting to ");
 Serial.println(ssid);

 WiFi.mode(WIFI_STA);
 WiFi.begin(ssid, password);

 while (WiFi.status() != WL_CONNECTED) {
   delay(500);
   Serial.print(".");
 }

 randomSeed(micros());

 Serial.println("");
 Serial.println("WiFi connected");
 Serial.println("IP address: ");
 Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
 Serial.print("Message arrived [");
 Serial.print(topic);
 Serial.print("] ");
 for (int i = 0; i < length; i++) {
   Serial.print((char)payload[i]);
 }
 Serial.println();

 // Switch on the LED if an 1 was received as first character
 if ((char)payload[0] == '1') {
   digitalWrite(BUILTIN_LED, LOW);   // Turn the LED on (Note that LOW is the voltage level
   // but actually the LED is on; this is because
   // it is active low on the ESP-01)
 } else {
   digitalWrite(BUILTIN_LED, HIGH);  // Turn the LED off by making the voltage HIGH
 }

}

void reconnect() {
 // Loop until we're reconnected
 while (!client.connected()) {
   Serial.print("Attempting MQTT connection...");
   // Create a random client ID
   String clientId = "ESP8266Client-";
   clientId += String(random(0xffff), HEX);
   // Attempt to connect
   if (client.connect(clientId.c_str())) {
     //Serial.println("connected");
     // Once connected, publish an announcement...
     client.publish("Senne123", "hello world");
     // ... and resubscribe
     client.subscribe("Topic123");
   } else {
     Serial.print("failed, rc=");
     Serial.print(client.state());
     Serial.println(" try again in 5 seconds");
     // Wait 5 seconds before retrying
     delay(5000);
   }
 }
}

void setup() {
 
 s.begin(9600);
 Serial.begin(9600);

 pinMode(BUILTIN_LED, OUTPUT);     // Initialize the BUILTIN_LED pin as an output
 Serial.begin(9600);
 setup_wifi();
 client.setServer(mqtt_server, 1883);
 client.setCallback(callback);
}

void loop() {
 
 s.write("s");
 if (s.available()>0)
{
   data=s.read();
   Serial.println(data);
   Serial.println(data1);
}

if (s.read(data)=<50) {

 
 if (!client.connected()) {
   reconnect();
 }
 client.loop();

 unsigned long now = millis();
 if (now - lastMsg > 2000) {
   lastMsg = now;
   ++value;
   snprintf (msg, MSG_BUFFER_SIZE, "HIGHT #%ld", value);
   Serial.print("Publish message: ");
   Serial.println(msg);
   client.publish("Topic123", msg);
 }
}



if (s.read(data1)=<60) {
 
 if (!client.connected()) {
   reconnect();
 }
 client.loop();

 unsigned long now = millis();
 if (now - lastMsg > 2000) {
   lastMsg = now;
   ++value;
   snprintf (msg, MSG_BUFFER_SIZE, "LOWT #%ld", value);
   Serial.print("Publish message: ");
   Serial.println(msg);
   client.publish("Topic123", msg);
 }
}
}

I know that i've made a similar post like this but, i still don't get it.
+1 little extra problem but i think i know how to fix it, is when i read a barcode with the pixy it sends data and data1 to the esp8266 serial monitor.

I would i appreciate the help!!

Master.ino (4.83 KB)

@giraffenstaart20

Your topic was Moved to it's current location / section as it is more suitable.

Can take a few moments to Learn and Use The Forum

Hello, Welcome to the Arduino Forum. This guide explains how to get the best out of this forum. Please read and follow the instructions below. Being new here you might think this is having rules for the sake of rules, but that is not the case. If you don’t follow the guidelines all that happens is there is a long exchange of posts while we try to get you to tell us what we need in order to help you, which is frustrating for you and frustrating for us. The people who try to help with your pro…

It will help you get the very best out of the forum in the future.

  • Your OS and version can be valuable information, please include it along with extra security you are using. Antivirus etc.
  • Always list the version of the IDE you are using and the board version if applicable.
  • Use quote or add error messages as an attachment NOT a picture.
  • How to insert an image into your post. ( Thanks sterretje )
  • Add your sketch where applicable but please use CODE TAGS
  • Add a SCHEMATIC were needed even if it is hand drawn
  • Add working links to any specific hardware as needed (NOT links to similar items)
  • Remember that the people trying to help cannot see your problem so give as much information as you can

COMMON ISSUES

  • Ensure you have FULLY inserted the USB cables.
  • Check you have a COMMON GROUND where required. ( Thanks Perry)
  • Where possible use USB 2.0 ports or a USB 2.0 POWERED HUB to rule out USB 3.0 issues.
  • Try other computers where possible.
  • Try other USB leads where possible.
  • You may not have the correct driver installed. CH340/341 or CP2102 or FT232 VCP Drivers - FTDI
  • There may be a problem with the board check or remove your wiring first.
  • Remove any items connected to pins 0 and 1.

COMPUTER RELATED

  • Close any other serial programs before opening the IDE.
  • Ensure you turn off any additional security / antivirus just to test.
  • There may be a problem with the PC try RESTARTING it.
  • You may be selecting the wrong COM port.
  • Avoid cloud/network based installations where possible OR ensure your Network/Cloud software is RUNNING.
  • Clear your browsers CACHE.
  • Close the IDE before using any other serial programs.
  • Preferably install IDE’s as ADMINISTRATOR or your OS equivalent

ARDUINO SPECIFIC BOARDS

  • CH340/341 based clones do not report useful information to the “get board info” button.
  • NANO (Old Types) some require you to use the OLD BOOTLOADER option.
  • NANO (ALL Types) See the specific sections lower in the forum.
  • NANO (NEW Types) Install your board CORE’s.
  • Unless using EXTERNAL PROGRAMMERS please leave the IDE selection at default “AVRISP mkII”.
  • Boards using a MICRO usb connector need a cable that is both DATA and CHARGE. Many are CHARGE ONLY.

CREATE editor install locations.

  • On macOs ~/Applications/ArduinoCreateAgent-1.1/ArduinoCreateAgent.app/Contents/MacOS/config.ini
  • On Linux ~/ArduinoCreateAgent-1.1/config.ini
  • On Windows C:\Users[your user]\AppData\Roaming\ArduinoCreateAgent-1.1

Performing the above actions may help resolve your problem without further help.

Language problem ?

Try a language closer to your native language:

Thanks to all those who helped and added to this list.

Rev 2.1.A

Read this excellent tutorial: Serial Input Basics - updated

You do realize that the Arduino Uno isn't necessary, right?

All you need is the NodeMcu ESP8266 board.

.

ballscrewbob:
@giraffenstaart20

Your topic was Moved to it's current location / section as it is more suitable.

Could you also take a few moments to Learn How To Use The Forum.

Other general help and troubleshooting advice can be found here.
It will help you get the best out of the forum in the future.

Oh im sorry, ill have a look at it

The ESP8266 uses lots of Strings under the hood for internet connectivity so no downside to using Strings in your code instead of low level c-string methods and char[]

Using Arduino Strings is easier and safer from programming errors.
See my Taming Arduino Strings for the details

Re your code, strip out all the internet stuff and just get the Serial running
Looks like you are just sending a byte not a char so Strings are not appropriate here. Check out the Serial Basics for handling byte arrays.

I could not get your ESP8266 code to compile. D5, D6 not defined and
s.read(data); is not valid for SoftwareSerial

Look at the SoftwareSerial examples in the ESP8266 package under Arduino15

However as mentioned above, suggest you drop the UNO and connect the barcode reader directly to the ESP2866.

Ok thanks for the help, btw the code only compiles when you connect the pins to the arduino for some reason, and how can i connect the barcode scanner (pixy2) to the esp, esp can’t be used as a slave.

giraffenstaart20:
Ok thanks for the help, btw the code only compiles when you connect the pins to the arduino for some reason, and how can i connect the barcode scanner (pixy2) to the esp, esp can’t be used as a slave.

Remember Google is your friend

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.