#include <DHT.h>
#include<ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include "Adafruit_SGP30.h"
#include <ArduinoJson.h>const char* ssid     = "Redmi";       // 连接 WiFi名 ,修改为自己的WiFi名
const char* password = "12345678";          // 连接 WiFi密码,修改为自己的WiFi密码/******************产品/设备配置(每个人需要根据自己的产品设备信息去动态更换)**********************/#define PRODUCT_KEY "*******"  //产品key  从产品详情获取
#define DEVICE_NAME "******"  //设备deviceName  从设备详情获取
// 服务端相关
#define MQTT_SERVER   PRODUCT_KEY ".iot-as-mqtt.cn-shanghai.aliyuncs.com" //阿里云MQTT服务地址
#define MQTT_PORT     1883                                               //MQTT服务端口
// 校验三元组
#define MQTT_CLIENT_ID  DEVICE_NAME "|securemode=3,signmethod=hmacsha1|" //mqtt clientid
#define MQTT_USERNAME   DEVICE_NAME "&" PRODUCT_KEY                      //mqtt username
#define MQTT_PASSWORD   "BC22B700B31E6452BE3BF495D35B531921CAAAC9"       //mqtt password 通过生成工具获得
// 相关主题 自定义一个主题
#define SUB_TOPIC "/" PRODUCT_KEY "/" DEVICE_NAME "/user/get"      //订阅主题
#define PUB_TOPIC0 "/" PRODUCT_KEY "/" DEVICE_NAME "/user/update"   //发布主题
#define PUB_TOPIC "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"   //发布主题/*************************************************************************************************//******************配置ESP8266的引脚**********************///温度传感器的引脚和类型配置
#define DHTPIN D5
#define DHTTYPE DHT11const int humanSensor = D0;  //人体红外传感器引脚
const int fireSensor  = D4;  //火焰传感器引脚
const int ultravioletSensor = A0; //紫外线引脚/*******************************************************//******************传感器的存储变量**********************/int humanState;      //检测人体的状态,有人为1,无人为0
int fireState;       //检测火焰的状态,有火为1,无火为0
float hum;           //湿度值
float temp;          //温度值uint16_t tvoc;            //总挥发性有机物
uint16_t co2;             //CO2浓度
uint16_t illumination;     //光照强度
uint16_t ultraviolet;    //紫外线数值/*****************************************************/int BH1750address = 0x23;   //光照强度传感器地址端接地
byte buff[2];          //光照强度缓存DHT dht(DHTPIN,DHTTYPE);
Adafruit_SGP30 sgp;WiFiClient espClient;               //创建wifi客户端
PubSubClient client(espClient);     //创建MQTT客户端void setup() {Serial.begin(115200);pinMode(humanSensor,INPUT);  //设置人体红外传感器引脚为输入模式pinMode(fireSensor,INPUT);   //设置火焰传感器引脚为输入模式dht.begin();   //开启温湿度传感器DHT11sgp.begin();   //开启CO2浓度检测Wire.begin();BH1750_Init(BH1750address);smartConfig();//setup_wifi();client.setServer(MQTT_SERVER,MQTT_PORT); //设置阿里云MQTT服务器地址和端口client.setCallback(callback);}void loop() {getHumanState();   //获取人体传感器的状态getFireState();    //获取火焰的状态getUltraviolet();getTempHum();   //获取温度和湿度值getVOTC();      //获取总挥发性有机物和二氧化碳的浓度getIllumination(); //获取光照强度的数值if (!client.connected()){reconnect();}client.loop();jsonAndPublish();//把获取的数据转变为json格式,并且上传阿里云delay(5000);}void jsonAndPublish(){StaticJsonDocument<256> doc;doc["id"] = "1";doc["version"] = "1.0";JsonObject params = doc.createNestedObject("params");params["humanState"] = humanState;params["fireState"] = fireState;params["hum"] = hum;params["temp"] = temp;params["tvoc"] = tvoc;params["co2"] = co2;params["illumination"] = illumination;params["ultraviolet"] = ultraviolet;doc["method"] = "thing.event.property.post";char output[256];serializeJson(doc, output);client.publish(PUB_TOPIC, output);Serial.println();Serial.println(output);Serial.println();
}void getIllumination(){if (2 == BH1750_Read(BH1750address)){illumination = ((buff[0] << 8) | buff[1]) / 1.2;Serial.print("光照强度:");Serial.print(illumination, DEC);Serial.println("[lx]");}
}void getVOTC(){if (! sgp.IAQmeasure()) {Serial.println("sgp measurement failed");return;}tvoc = sgp.TVOC;co2 = sgp.eCO2;Serial.print("TVOC "); Serial.print(sgp.TVOC); Serial.println(" ppb\t");Serial.print("eCO2 "); Serial.print(sgp.eCO2); Serial.println(" ppm");
}void getUltraviolet(){ultraviolet = analogRead(ultravioletSensor);Serial.print("紫外线: ");Serial.print(ultraviolet);Serial.println();
}void getTempHum(){hum=dht.readHumidity();temp=dht.readTemperature();Serial.print("hum: ");Serial.print(hum);Serial.println("%");Serial.print("temp: ");Serial.print(temp);Serial.println("C");
}void getFireState(){fireState = digitalRead(fireSensor);Serial.print("火焰状态: ");if(fireState==1){Serial.println("有火");}else{Serial.println("无火");}
}void getHumanState(){humanState= digitalRead(humanSensor);Serial.print("人体状态: ");if(humanState==1){Serial.println("有人");}else{Serial.println("无人");}
}int BH1750_Read(int address) //
{int i = 0;Wire.beginTransmission(address);Wire.requestFrom(address, 2);while (Wire.available()) //{buff[i] = Wire.read();  // receive one bytei++;}Wire.endTransmission();return i;
}void BH1750_Init(int address)
{Wire.beginTransmission(address);Wire.write(0x10);//1lx reolution 120msWire.endTransmission();
}void setup_wifi()
{delay(10);// We start by connecting to a WiFi networkSerial.println();Serial.print("Connecting to ");Serial.println(ssid);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED){delay(500);Serial.print(".");}Serial.println("");Serial.println("WiFi connected");Serial.println("IP address: ");Serial.println(WiFi.localIP());
}//收到订阅Topic信息的回调处理
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();// 平台发来命令“1”时开灯if ((char)payload[0] == '1'){digitalWrite(BUILTIN_LED, HIGH);}else{digitalWrite(BUILTIN_LED, LOW);}
}void reconnect()
{// Loop until we're reconnectedwhile (!client.connected()){Serial.print("Attempting MQTT connection...");// Attempt to connectif (client.connect(MQTT_CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)){ Serial.println("MQTT server connected");// 订阅主题client.subscribe(SUB_TOPIC);}else{Serial.print("failed, rc=");Serial.print(client.state());Serial.println(" try again in 5 seconds");// Wait 5 seconds before retryingdelay(5000);}}
}void smartConfig()
{WiFi.mode(WIFI_STA);Serial.println("\r\nWait for Smartconfig");delay(2000);// 等待配网WiFi.beginSmartConfig();while (1){Serial.print(".");delay(500);if (WiFi.smartConfigDone()){Serial.println("SmartConfig Success");Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());WiFi.setAutoConnect(true);  // 设置自动连接break;}}Serial.println("");Serial.println("WiFi connected");  Serial.println("IP address: ");Serial.println(WiFi.localIP());
}

通过一键配网,上传阿里云数据相关推荐

  1. Arduino-ESP8266检测温湿度上传阿里云

    Arduino-ESP8266检测温湿度上传阿里云 硬件准备 Arduino IDE环境 阿里云端 实物接线 IDE库文件配置 ArduinoJson AliyunIoTSDK PubSubClien ...

  2. 微信小程序上传阿里云OSS,返回204,400,403,405,解决方案

    目录 微信小程序上传阿里云 ==OSSAccessKeyId,policy,signature==如何获取呢? 配置Bucket跨域访问 配置外网域名到小程序的域名白名单 上传报错(返回400,403 ...

  3. Esp32读取温湿度数据通过mqtt上传阿里云平台

    目录 前言 一.esp32刷MicroPython固件库 二.创建阿里云产品 1.注册阿里云账号并登录控制台 2.找到物联网平台中的公共实例进入 3.创建产品及设备 4.编辑物模型并发布 5.最后找到 ...

  4. 上传阿里云oss对象型存储 本地文件和上传流上传

    上传阿里云oss对象型存储 本地文件和上传流上传 import java.io.ByteArrayInputStream; import java.io.File; import java.io.Fi ...

  5. base64格式的图片上传阿里云

    base64格式的图片上传阿里云 上传图片的时候,除了普通的图片上传,还有一张图片信息是以base64格式发送到后台的. 后台接受base64格式的图片,上传至阿里云代码:(主要是将base64转化成 ...

  6. 微信 开发 图片 上传 阿里云 oss 服务器

    在做微信开发时,我需要将图片上传至阿里云OSS,思路是服务端下载微信图片再转存至OSS. wx.chooseImage({count: 1, // 默认9sizeType: ['original', ...

  7. 文件分片上传阿里云OSS

    本文参考其他博客并结合自身编写 博客原作者:程序猿谢哥哥 博客原地址:https://blog.csdn.net/weixin_42825651/article/details/108792264 注 ...

  8. spring boot上传阿里云对象存储OSS快速上手(一、控制台简介)

    代码实现请看下一篇: spring boot上传阿里云对象存储OSS快速上手(二.代码实现,复制粘贴可用) 简介: 1.阿里云对象存储OSS其实就是一个文件存储的服务 2.在我们的开发过程中会遇到类似 ...

  9. 自定义镜像上传阿里云(图文教程 附带思维导图)

    自定义镜像上传阿里云 alpine Linux简介 思维导图 使用Dockerfile基于alpine制作JDK8镜像 使用Dockerfile基于alpine制作最小JRE基础镜像 将Docker镜 ...

最新文章

  1. 近期活动盘点:2018数据与媒介发展论坛、大数据应用中日交流论坛(11.04-11.15)...
  2. .gitignore和.gitkeep有什么区别?
  3. Git 版本控制之 GitFlow
  4. 2018年,自然语言处理很全的应用与合作
  5. matlab是以什么运算为基础,matlab基础运算
  6. 操作系统原理(三)进程管理、线程、并发和并行
  7. Vue:带参数函数在传递参数的同时传递事件对象
  8. 红米5a android,红米5A值得买吗?红米5A测评告诉你(附全文)
  9. 一次性搞懂 HTTP、HTTPS、SPDY
  10. sin的傅里叶变换公式_正弦信号傅里叶变换
  11. echarts 横向柱状图
  12. 机器学习中的数学——拟牛顿法(Quasi-Newton Methods)
  13. 虚拟化系列-VMware vSphere 5.1 VDP备份管理
  14. google 趣事面试题
  15. android 调用搜狗地图api,sogou地图API用法实例教程
  16. 美克美家php面试,(⊙o⊙)细说【美克美家】之待遇
  17. 菊风云 | 音视频社交崛起的背后
  18. 深度学习中的注意力机制(2017版)
  19. [ STK ](二)STK 与 Matlab 互联(亲测成功)
  20. Amazon SP-API文档看着累?那就看这里!

热门文章

  1. 在群晖的docker中使用auska-docker-baidupcs出现下载文件错误, mkdir /mnt/: permission denied
  2. python 千分位
  3. python面向对象图片_趣味解读Python面向对象编程 (类和对象)
  4. 耳朵白鲸沙龙《新媒体编辑如何打造轻量级爆品?》
  5. Linux查找文件夹的名字
  6. C++操作PostgreSQL数据库
  7. li标签超出自动换行
  8. python魔法方法_python,魔法方法指南
  9. Android刘海屏如何适配?一份详细的Android刘海屏、水滴屏全面屏适配方案
  10. android 判断手机是否是国内的手机的方法