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)