Hello guys.
I want to send data which 2 packets ( temperature and hudimity) from arduino to ESP NodeMcu. I used Serial Communication but it didn't work. Can you help me?
Thank you somuch.
Here are my code:
Tx _ Arduino
#include <SoftwareSerial.h>
SoftwareSerial s(0,1);
char inData[24];
byte index;
int windVal;
int temp;
boolean started = false;
boolean ended = false;
void setup()
{
Serial.begin(9600);
s.begin(9600);
Serial.println("Temperature & Humidity");
}
void loop()
{
while(Serial.available() > 0)
{
char aChar = Serial.read();
if(aChar == '<')
{
started = true;
index = 0;
inData[index] = '\0';
}
else if(aChar == '>')
{
ended = true;
}
else if(started)
{
inData[index] = aChar;
index++;
inData[index] = ',';
}
}
if(started && ended)
{
// Use the value
if(inData[0] == 'T')
{
inData[0] = ' ';
int windVal = atoi(inData);
s.write(windVal);
Serial.println(" ");
Serial.print("Temp:");
Serial.print(inData);
Serial.print("C");
Serial.println(" ");
}
else if(inData[0] == 'H')
{
inData[0] = ' ';
int temp = atoi(inData);
s.write(temp);
Serial.println(" ");
Serial.print("Humidity:");
Serial.print(inData);
Serial.print("%");
Serial.println(" ");
}
started = false;
ended = false;
index = 0;
inData[index] = '\0';
}
}
Rx_NodeMCU
#include <SoftwareSerial.h>
// Libraries
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
SoftwareSerial s(3,1);
// WiFi parameters
#define WLAN_SSID "Nangsuat-Technology"
#define WLAN_PASS "comphone"
// Adafruit IO
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "nhatnguyenpt"
#define AIO_KEY "e01a5a80956249ca886990be948e6dd7" // Obtained from account info on io.adafruit.com
// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
// Setup feeds for temperature & humidity
Adafruit_MQTT_Publish temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temp");
Adafruit_MQTT_Publish humidity = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/humidity");
/*************************** Sketch Code ************************************/
int windVal,temp;
void setup() {
// Init sensor
// dht.begin();
Serial.begin(9600);
s.begin(9600);
Serial.println(F("Adafruit IO Example"));
// Connect to WiFi access point.
Serial.println(); Serial.println();
delay(10);
Serial.print(F("Connecting to "));
Serial.println(WLAN_SSID);
WiFi.begin(WLAN_SSID, WLAN_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(F("."));
}
Serial.println();
Serial.println(F("WiFi connected"));
Serial.println(F("IP address: "));
Serial.println(WiFi.localIP());
// connect to adafruit io
connect();
}
void loop() {
// ping adafruit io a few times to make sure we remain connected
if(! mqtt.ping(3)) {
// reconnect to adafruit io
if(! mqtt.connected())
connect();
}
if (Serial.available()) {
Serial.write(Serial.read());
}
windVal = Serial.read(); //Read the serial data and store it
temp = Serial.read();
delay(1000);
// Publish data
if (! temperature.publish(windVal))
Serial.println(F("Failed to publish temperature"));
else
Serial.println(F("Temperature published!"));
if (! humidity.publish(temp))
Serial.println(F("Failed to publish humidity"));
else
Serial.println(F("Humidity published!"));
// Repeat every 10 seconds
Serial.print("Humidity: ");
Serial.print(windVal);
Serial.print(",");
// Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.println(temp);
// Serial.print(" *C ");
delay(10000);
}
// connect to adafruit io via MQTT
void connect() {
Serial.print(F("Connecting to Adafruit IO... "));
int8_t ret;
while ((ret = mqtt.connect()) != 0) {
switch (ret) {
case 1: Serial.println(F("Wrong protocol")); break;
case 2: Serial.println(F("ID rejected")); break;
case 3: Serial.println(F("Server unavail")); break;
case 4: Serial.println(F("Bad user/pass")); break;
case 5: Serial.println(F("Not authed")); break;
case 6: Serial.println(F("Failed to subscribe")); break;
default: Serial.println(F("Connection failed")); break;
}
if(ret >= 0)
mqtt.disconnect();
Serial.println(F("Retrying connection..."));
delay(5000);
}
Serial.println(F("Adafruit IO Connected!"));
}
Here is my screenshoot Serial Monitor