通过一键配网,上传阿里云数据
#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());
}
通过一键配网,上传阿里云数据相关推荐
- Arduino-ESP8266检测温湿度上传阿里云
Arduino-ESP8266检测温湿度上传阿里云 硬件准备 Arduino IDE环境 阿里云端 实物接线 IDE库文件配置 ArduinoJson AliyunIoTSDK PubSubClien ...
- 微信小程序上传阿里云OSS,返回204,400,403,405,解决方案
目录 微信小程序上传阿里云 ==OSSAccessKeyId,policy,signature==如何获取呢? 配置Bucket跨域访问 配置外网域名到小程序的域名白名单 上传报错(返回400,403 ...
- Esp32读取温湿度数据通过mqtt上传阿里云平台
目录 前言 一.esp32刷MicroPython固件库 二.创建阿里云产品 1.注册阿里云账号并登录控制台 2.找到物联网平台中的公共实例进入 3.创建产品及设备 4.编辑物模型并发布 5.最后找到 ...
- 上传阿里云oss对象型存储 本地文件和上传流上传
上传阿里云oss对象型存储 本地文件和上传流上传 import java.io.ByteArrayInputStream; import java.io.File; import java.io.Fi ...
- base64格式的图片上传阿里云
base64格式的图片上传阿里云 上传图片的时候,除了普通的图片上传,还有一张图片信息是以base64格式发送到后台的. 后台接受base64格式的图片,上传至阿里云代码:(主要是将base64转化成 ...
- 微信 开发 图片 上传 阿里云 oss 服务器
在做微信开发时,我需要将图片上传至阿里云OSS,思路是服务端下载微信图片再转存至OSS. wx.chooseImage({count: 1, // 默认9sizeType: ['original', ...
- 文件分片上传阿里云OSS
本文参考其他博客并结合自身编写 博客原作者:程序猿谢哥哥 博客原地址:https://blog.csdn.net/weixin_42825651/article/details/108792264 注 ...
- spring boot上传阿里云对象存储OSS快速上手(一、控制台简介)
代码实现请看下一篇: spring boot上传阿里云对象存储OSS快速上手(二.代码实现,复制粘贴可用) 简介: 1.阿里云对象存储OSS其实就是一个文件存储的服务 2.在我们的开发过程中会遇到类似 ...
- 自定义镜像上传阿里云(图文教程 附带思维导图)
自定义镜像上传阿里云 alpine Linux简介 思维导图 使用Dockerfile基于alpine制作JDK8镜像 使用Dockerfile基于alpine制作最小JRE基础镜像 将Docker镜 ...
最新文章
- 近期活动盘点:2018数据与媒介发展论坛、大数据应用中日交流论坛(11.04-11.15)...
- .gitignore和.gitkeep有什么区别?
- Git 版本控制之 GitFlow
- 2018年,自然语言处理很全的应用与合作
- matlab是以什么运算为基础,matlab基础运算
- 操作系统原理(三)进程管理、线程、并发和并行
- Vue:带参数函数在传递参数的同时传递事件对象
- 红米5a android,红米5A值得买吗?红米5A测评告诉你(附全文)
- 一次性搞懂 HTTP、HTTPS、SPDY
- sin的傅里叶变换公式_正弦信号傅里叶变换
- echarts 横向柱状图
- 机器学习中的数学——拟牛顿法(Quasi-Newton Methods)
- 虚拟化系列-VMware vSphere 5.1 VDP备份管理
- google 趣事面试题
- android 调用搜狗地图api,sogou地图API用法实例教程
- 美克美家php面试,(⊙o⊙)细说【美克美家】之待遇
- 菊风云 | 音视频社交崛起的背后
- 深度学习中的注意力机制(2017版)
- [ STK ](二)STK 与 Matlab 互联(亲测成功)
- Amazon SP-API文档看着累?那就看这里!
热门文章
- 在群晖的docker中使用auska-docker-baidupcs出现下载文件错误, mkdir /mnt/: permission denied
- python 千分位
- python面向对象图片_趣味解读Python面向对象编程 (类和对象)
- 耳朵白鲸沙龙《新媒体编辑如何打造轻量级爆品?》
- Linux查找文件夹的名字
- C++操作PostgreSQL数据库
- li标签超出自动换行
- python魔法方法_python,魔法方法指南
- Android刘海屏如何适配?一份详细的Android刘海屏、水滴屏全面屏适配方案
- android 判断手机是否是国内的手机的方法