【物联网】Arduino Uno开发板连接阿里云实现云端远程控制LED灯开关

这篇具有很好参考价值的文章主要介绍了【物联网】Arduino Uno开发板连接阿里云实现云端远程控制LED灯开关。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 思维图概览

需要实现的有

  • ESP8266通过wifi与阿里云进行通信
  • ESP8266与Arduino Uno开发板的通信
  • Arduino Uno开发板与LED灯的通信

【物联网】Arduino Uno开发板连接阿里云实现云端远程控制LED灯开关

2 阿里云—>ESP8266 部分

参考昨天的文章

  • 【阿里云】物联网平台配置ESP8266真实设备AT串口连接,支持MQTT协议通信
    https://blog.csdn.net/qq_33957603/article/details/124575451

参考的AT指令

AT+RST
AT+RESTORE
AT+CWMODE=1
AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"
AT+CWJAP="WiFi名字","WiFi密码"
AT+MQTTUSERCFG=0,1,"NULL","用户名","密码",0,0,""
AT+MQTTCLIENTID=0,"ClienId"    //clientId第二个参数注意每个逗号后加分隔符“\”,例如:t|securemode=3\,signmethod=hmacsha1\,
AT+MQTTCONN=0,"连接域名",1883,1    //连接域名中的端口号已经被提到后面了,所以删去“:1883”

3 ESP8266—>ArduinoUno开发板 部分

ArduinoUno软件官网下载

  • https://www.arduino.cc/en/software

串口接受到的云端数据(含物模型格式)

+MQTTSUBRECV:0,"/sys/xxxxxx/xxx/thing/service/property/set",100,{"method":"thing.service.property.set","id":"xxxxx","params":{"powerstate":1},"version":"1.0.0"}

参考代码
AT指令部分请用阿里云连接ESP8266的部分进行替换


/* 连接LOT的AT指令,可修改WIFI和三元组 */
//#define AT_1 "AT+RST"    //AT重启指令暂时不用
//#define AT_2 "AT+RESTORE"
#define AT_3 "AT+CWMODE=1"
#define AT_4 
#define AT_5 
#define AT_6 
#define AT_7 
#define AT_8 

#include <ArduinoJson.h>    //JOSN字符串库
#include <SoftwareSerial.h>
SoftwareSerial softSerial1(10,11); //定义软串口1与音乐播放器模块通信
const int LED = 7;  //灯的引脚

int Json_isTopic(String espjson);
void Serial_Transfer();
int Aliyun_Connect();
String Json_Extraction(String espjson);
int Json_Parse(String Json,int* LightSwitch);

String espstring;
int LightSwitch = 0;

void setup()
{
  Serial.begin(9600);             //与电脑连接的硬串口一般不建议连接其他设备
  softSerial1.begin(9600);            //定义为softSerial1串口专门与esp8266连接  "AT+UART_DEF=9600,8,1,0,0"已经把esp8266波特率改成9600
  softSerial1.listen();
  pinMode(LED,OUTPUT);            //小灯泡引脚设置
  Aliyun_Connect();          //阿里云连接函数 
  
}

void loop()
{
  if(softSerial1.available()){                             //注意串口容易丢失数据,要保证loop函数准确
    espstring = softSerial1.readString();                     //使用.readString()可以直接读取全部串口内容,可以不需要循环了(但是实际上有点不稳定,需要一个循环)
    Serial.println(espstring);
    Json_isTopic(espstring);
  }
}


int Json_isTopic(String espjson){
    int left = 0;
    for(int i = 0; i < espjson.length(); i++){
      if(espjson[i]=='{'){
        left = i; break;
      }
    }
    espjson = espjson.substring(left,espjson.length() - 1);  Serial.println(espjson);
    if(espjson == "ERRER"){return -1;}
    Json_Parse(espjson,&LightSwitch);     //读取Json字符串变量
    Serial.println(LightSwitch);
    digitalWrite(LED,LightSwitch);
    return 0;
}

/* AT反馈字符串提取JSON字符串函数 */
//String Json_Extraction(String espjson){   //从espjson里提取出Json字符串再return回去赋值,如果错误则出"ERRER"
//  int Json_Left = 0; int Json_Right = 0; int Json_Bracket = 1;            //定义Json字符串的左边界、右边界、括号数量变量
//  while(Json_Left < espjson.length() - 1 and espjson[Json_Left] != '{'){Json_Left +=1;}   //历遍espjson直到第一个'{'后将位置赋值给Json_Left
//  if(Json_Left >= espjson.length() - 1){return "ERRER";}
//  else{
//    for(Json_Right = Json_Left + 1;Json_Right < espjson.length();Json_Right++){  //从Json_Left+1开始历遍espjson,到Json_Bracket(括号数量)为0时停止,位置赋值给Json_Right
//      if(espjson[Json_Right] == '{'){Json_Bracket += 1;}
//      else if(espjson[Json_Right] == '}'){Json_Bracket -= 1;}
//      if(Json_Bracket == 0){break;}
//    }
//    if(Json_Right < espjson.length()){
//      return espjson.substring(Json_Left,Json_Right+1);   //.substring(Json_Left,Json_Right+1)提取出可能的JSON字符串并return出
//    }
//  }
//  return "ERRER";
//}

int Json_Parse(String Json,int* LightSwitch){  // Brightness为临时控制下语音播放模块
  StaticJsonDocument<200> jsonBuffer;       //创建一个名为jsonBuffer的JSON变量
  DeserializationError error = deserializeJson(jsonBuffer, Json);  //使用Json字符串构建JSON变量并赋值于jsonBuffer
  if (error){     //构建错误就报错  
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    return -1;
  }
  *LightSwitch = jsonBuffer["params"]["powerstate"];
  return 0;
}


/* 函数AT结果反馈Serial */
void Serial_Transfer(){   //主要用于测试连接结果 简单粗暴!
  char s_A;
  while(!softSerial1.available()){}   //神技!可以保证信息传输到位
  while(softSerial1.available() > 0){
    s_A = char(softSerial1.read()); delay(2);      //延时很关键,串口读取可能过快
    Serial.print(s_A);
  }
  return 0;
}

/* LOT服务器连接代码 */
int Aliyun_Connect(){       // 返回数:yes为0,no为-1
  String s_AT = "";         // s_AT只用于判断是否连接LOT服务器
  Serial.print("是否开始连接LOT服务器:(yes/no):\t\t");
  while(s_AT != "yes"){     //输入(yes/no)判断是否连接服务器,yes只需要保证前三个为yes即可,注意需要/r/n及串口监视器的NL AND CL模式
    if(Serial.available() > 0){
      s_AT += char(Serial.read());
      delay(2);      //很关键,串口读取可能过快
    }else{
      if(s_AT == "no\r\n"){
        Serial.println("no\n不连接服务器 将启用部分功能 请尽快连接服务器\n");
        return -1;
      }s_AT = "";
    }
  }
  Serial.println("yes\n开始连接LOT服务器 请稍等!\n");
  softSerial1.println(AT_3); Serial_Transfer();
  softSerial1.println(AT_4); Serial_Transfer();
  softSerial1.println(AT_5); Serial_Transfer(); Serial_Transfer(); Serial_Transfer();  //连接WIFI时,它有三次不同的回答,注意来三次应对
  softSerial1.println(AT_6); Serial_Transfer();
  softSerial1.println(AT_7); Serial_Transfer();
  softSerial1.println(AT_8); Serial_Transfer(); Serial_Transfer();  //第一次发“+MQTT.....1” 第二次才是OK,这不同步
  Serial.println("\nLOT服务器连接完成!\n");
  while(softSerial1.read() >= 0){}   //最后清理干净各串口
  while(Serial.read() >= 0){} 
  return 0;
}

【物联网】Arduino Uno开发板连接阿里云实现云端远程控制LED灯开关文章来源地址https://www.toymoban.com/news/detail-437127.html

4 ArduinoUno开发板—>LED灯 部分

  • 硬件部分自行配置,详细参考Arduino教程
    【物联网】Arduino Uno开发板连接阿里云实现云端远程控制LED灯开关

5 云端体验控制

  • 在阿里云物联网控制台的在线调试中修改灯泡的开关即可, 数据会以物模型的形式发送到ESP8266,然后经过Arduino代码解析json,提取有用的信息,控制硬件实现LED灯的开关。
    【物联网】Arduino Uno开发板连接阿里云实现云端远程控制LED灯开关

到了这里,关于【物联网】Arduino Uno开发板连接阿里云实现云端远程控制LED灯开关的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • arduino UNO通过AT指令控制esp8266连接WiFi及onenet云平台

    写下这篇文章是为了记录我学习使用esp8266的过程。在本文中我们会使用AT指令通过MQTT协议连接onenet云平台 1)关于onenet MQTT设备创建 在设备连接onenet平台中,你又几个设备onenet就需要添加几个设备,就比如我有一个arduino端,一个QT端,还有一个测试端需要连接同一个onenet MQ

    2024年02月01日
    浏览(45)
  • 基于Arduino Uno开发板制作音乐播放器

    1.Arduino开发板 Arduino Uno 是一款基于 Microchip ATmega328P 微控制器的开源微控制器板,由 Arduino.cc 开发,最初于 2010 年发布。该板配备了一组数字和模拟输入/输出 (I/O) 引脚,可以连接到各种扩展板(屏蔽)和其他电路。 该板具有 14 个数字 I/O 引脚(6 个能够进行 PWM 输出)、6 个

    2024年02月16日
    浏览(47)
  • Arduino uno 通过esp8266WIFI模块连接onenet平台(TCP协议)(1接线、代码篇)

    1.可以用esp8266开发板,也可以用esp01s,有引脚说明(左)或esp01(右)  ESP8266Node-MCU(ESP-12E) esp01s接线如下:  esp01接线: 2.代码1:设置连接方式,WiFi账号密码,tcp协议等 打开串口监视器(右上角放大镜图标) 等待显示“ok ready” 输入AT 返回ok 输入AT+RST 返回 ok 一长段乱码

    2024年02月04日
    浏览(56)
  • 国际站阿里云物联网云端部署方案!!

    iHC-3308GW阿里云物联网云端部署。阿里云物联网云端部署方案具有以下特点:支持RS485、CAN、RS232多种通讯方式;支持Modbus标准工业协议转MQTT协议;云端支持阿里云和私有云部署。通过温湿度传感器的技术案例,我们可以进行云端部署。 ·硬件包括一台iHC-3308GW工业4G智能网关和

    2024年02月10日
    浏览(60)
  • Arduino Uno开发板+电机驱动扩展版CNC Shield V3.0硬件说明

    陈拓 2023/03/24-2023/03/29 注意:板子左侧中间的玻璃管是玻封保险丝。 Arduino CNC Shield可以搭载A4988、DRV8825等步进电机驱动模块,用于驱动NEMA17电机(俗称42步进电机)。 2.1 A4988 2.1.1 引脚布局 注意:模块使用时需加装散热器。 单片机只需要控制两个引脚DIR和STEP即可控制步进电机

    2024年02月01日
    浏览(56)
  • 物联网网关:连接设备与云端的桥梁

    物联网网关作为连接设备与云端的桥梁,承担着采集数据、设备远程控制、协议转换、数据传输等重要任务。物联网网关是一种网络设备,它可以连接多个物联网设备,实现设备之间的数据传输和通信。物联网网关通常具有较高的网络带宽和处理能力,能够满足大量设备同时

    2024年02月07日
    浏览(40)
  • 合宙Air780e+luatos+阿里云物联网平台完成设备通信与控制(属性上报+4G远程点灯)

    之前发布的文章有采用合宙的4G LTE Cat.1模块,编程语言用的是lua,整体来说代码比较简洁,实现对华为云物联网平台的设备通信与控制,即采用一个变量作为模拟属性定时上报,并以一个LED灯作为受控设备进行云端命令的控制,本期内容为使用了 阿里云 物联网平台完成同样

    2024年02月06日
    浏览(50)
  • 【智能家居远程控制系统】ESP8266连接阿里云(一)

    第一章 阿里云物联网平台搭建 第二章 订阅与发布MQTT消息 第三章 为ESP8266-NodeMCU搭建ArduinoIDE环境  第四章 ESP8266连接阿里云 第五章 阿里云平台云产品流转 第六章 使用Aruino与云产品流转实现远程控制ESP8266 文章目录 目录 系列文章目录 前言 一、注册阿里云IOT 二、创建MQTT.

    2024年02月07日
    浏览(53)
  • 【智能家居远程控制系统】ESP8266连接阿里云(六)

    第一章 阿里云物联网平台搭建 第二章 订阅与发布MQTT消息 第三章 为ESP8266-NodeMCU搭建ArduinoIDE环境  第四章 ESP8266连接阿里云 第五章 阿里云平台云产品流转 第六章 使用Aruino与云产品流转实现远程控制ESP8266 目录 前言 一、远程控制的意义 二、准备工作 1.阿里云平台设备创建

    2024年02月03日
    浏览(55)
  • 7.MIT App inventor 自制手机APP连接阿里云平台 手机APP远程控制STM32设备

    提示:这里是从实际应用如何使用教学配置,未从原理讲解,适合小白从零开始到成功,比较有成就感 STM32+ESP8266(AT固件)连接阿里云物联网系列保姆级教学 1. 创建产品和设备 2. 设置产品Topic数据和功能定义设备物模型数据显示 3. 硬件连接+代码修改 4. Web数据可视化 5.功能

    2024年02月22日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包