|
楼主 |
发表于 2020-5-10 12:52
|
显示全部楼层
本帖最后由 yun8023ying 于 2020-5-26 14:53 编辑
全部代码如下
[mw_shl_code=arduino,true]#define BLINKER_WIFI
#include <Blinker.h>
char auth[] = "faa0000004e";
char ssid[] = "1234";
char pswd[] = "88888888";
// 新建组件对象
BlinkerButton Button1("btn-abc"); //定义为案件
BlinkerNumber Number1("num-abc"); //定义为数字
BlinkerNumber ntc1("snwd");
BlinkerNumber ntc2("ygwd");
int counter = 0;
float ntc1_read = 0, ntc2_read = 0; //组件名已用再起个名
const int num = 20; // 平均的总数 const 数值固定
int readings[num]; // 定义存储读入数值的数组
int readIndex = 0; // 定义指示数组数值的索引
float total = 0.00; // 定义存储数组数值的总数
float average = 0.00; // 定义数组数值的平均数
const int B =3950; // 为NTC型热敏电阻B值
float Rt,V1,V2,X ; //为测量温度下热敏电阻的阻值 单位为Ω
float R1 = 10000.00 ; //为热敏电阻标称温度下的阻值 单位为Ω
float R2 = 9800.00; //分压电阻
float V = 3.30; //电压
float C; //温度值
// 按下按键即会执行该函数
void button1_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
counter++;
Number1.print(counter);
}
void heartbeat() //心跳包,定时发送数据到服务器
{
ntc1.print( ntc1_read);
ntc2.print(ntc2_read);
}
void dataStorage() //注册
{
Blinker.dataStorage("snwd", ntc1_read);
Blinker.dataStorage("ygwd", ntc2_read);
}
void setup()
{ Serial.begin(9600);
BLINKER_DEBUG.stream(Serial);//开启调试
BLINKER_DEBUG.debugAll();
// 初始化有LED的IO
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH); //默认亮灯??
Blinker.begin(auth, ssid, pswd); // 初始化blinker
Blinker.attachHeartbeat(heartbeat);//开启心跳包上传功能
Blinker.attachDataStorage(dataStorage);//开启历史数据存储功能
Blinker.attachData(dataRead);
Button1.attach(button1_callback);
for (int thisReading = 0; thisReading < num; thisReading++) {
readings[thisReading] = 0;
}
}
void loop() {
X = analogRead(A0);// 读取传感器值
V1 = X/1024*V ; //电压
Rt = V1/(V-V1)*R2 ; // 上拉
C = 1/(1/(298.15) + log(Rt/R1)/B) -273.15; //计算当前的温度值
C = C *1000; //数组不能放小数,扩大以提高精度
total = total - readings[readIndex];// 总值中,减去数组的最后一个数值
readings[readIndex] = C; // 将温度存储到数组的最后一位。
total = total + readings[readIndex]; // 将最新读入的数值加入到总值中
readIndex = readIndex + 1; // 将数组指示索引值加1
// 判断数组指示索引是否超出数组范围,
// 如果是,将数组指示索引重置为0
if (readIndex >= num) {
readIndex = 0;
}
average = total/num/1000; // 计算平均值
if (average > 30) {
Blinker.push("警告!!!温度过高,当前已经超过30度");
Blinker.sms("警告!!!温度过高,当前已经超过30度");
Blinker.wechat("警告!!!", "超温提示", "警告!!!温度过高,当前已经超过30度");
Blinker.wechat("警告!!!温度过高,当前已经超过30度");
}
if (average < 20) {
Blinker.push("警告!!!温度过低,当前已经不足20度");
Blinker.sms("警告!!!温度过低,当前已经不足20度");
Blinker.wechat("警告!!!", "低温提示", "警告!!!温度过低,当前已经不足20度");
Blinker.wechat("警告!!!温度过低,当前已经不足20度");
}
ntc1_read = average -1; //本来想弄两个探头的,但是8266只有一个模拟输入
ntc2_read = average;
Blinker.run();
Blinker.delay(500);
}[/mw_shl_code]
|
|