使用esp8266与arduino通过串口通信实现数据传输

通过esp8266与arduino通过串口通信实现数据传输,通过控制led的熄灭。实现物联网的基础。

使用的材料

  1. arduion
  2. esp8266 nodemcu
  3. 面包板
  4. led灯、电阻、杜邦线

连接的示意图

 

两个硬件之间的连接通信为:

esp8266上的tx、rx通过杜邦线连接arduino 上的引脚6、7 。arudion上的8号引脚为输出引脚控制led的灯

程序源码:

esp8266程序代码

  模拟重互联网上获取到json数据。通过引脚的方式发送给arduino。使用ArduinoJosn的库生成json数据

一定是Serial.print的方式发送数据。要不然发送会失败,arduino是不会接收到数据的

/**
 * 实现esp8266发送数据给arduion实现led灯的闪亮
 */
#include 
#include  //ESP8266 Library
const char* ssid = "nova"; //Enter your Wi-Fi SSID
const char* password = "wifi.danke.life"; //Enter you Wi-Fi Password
int i=0;
void setup() {
    Serial.begin(9600);
    WiFi.begin(ssid, password); //connect to the network specified above
}

void loop() {
  if(i==0){
     Serial.print(sendJson("0"));//发送数据给arduino
    i=1;
    }else{
     Serial.print(sendJson("1"));//发送数据给arduino
    i=0;
  }
  delay(2000);
}

String sendJson(String data){
const size_t capacity = JSON_OBJECT_SIZE(1)+10;
DynamicJsonDocument doc(capacity);
doc["7"] = data;
String josn;
serializeJson(doc, josn);
return  josn;
  }

arduino程序源码

实现的主要功能:

  1. 接收esp8266的json数据
  2. 解析json数据
  3. 通过状态数据8号引脚,实现led灯的控制
/**
 * 接收esp8266发送的json数据,控制led灯
 */
#include 
#include 
SoftwareSerial ESP_Serial(6, 7); //Tx,Rx
void setup() {
  Serial.begin(9600);
  ESP_Serial.begin(9600);
  delay(2000);
 Serial.println("Hello ESP8266.");// "初始化输出信息 hello world"
 //将8号引脚设置为输出模式
 pinMode(8,OUTPUT);//设置数字IO引脚为输出模式
}

void loop() {
String jsonData= json();
      if(jsonData.length()>0){
          const size_t capacity = JSON_OBJECT_SIZE(1) + 10;
       DynamicJsonDocument doc(capacity);
       deserializeJson(doc, jsonData);
       const char* root_7 = doc["7"]; // "0"
       int numKey=doc["7"].as();
       Serial.print(numKey);
       digitalWrite(8,numKey);
       delay(300);
        }else{
          //不做操作
           delay(1000);        
   }
   
    
    
}
//获取sep8266上发送过来的数据
String json(){
  String comdata = "";
   while(ESP_Serial.available() > 0){//串口接收到数据
        comdata += char(ESP_Serial.read());//获取串口接收到的数据
          delay(2);
    }
    Serial.print(comdata);
  return comdata;
  }

SoftwareSerial使用该库获取ESP8266串口数据,使用ArduinoJson库解析json数据。

你可能感兴趣的:(物联网,物联网)