基于ESP8266的联网温度监测点

  • 起源
  • 是啥玩意
  • 耗材
  • 电路
  • 程序
    • esp8266部分
    • 网站PHP程序
      • 接收程序
      • 查看程序
  • 使用方法

起源

闲的慌,想找点事情做
监测详细的温度可以作为其他自动化控制的数据基础,检测统计的数据能够反应小环境的温度背景
成熟的工业产品价格也不贵,就是闲的荒

是啥玩意

通过8266采集温度传感器的温度数据,上传到服务器。访问网站即可查询相关数据。

耗材

  1. ESP8266*1 ,访问互联网和采集信息的终端;
  2. 温度传感器*1,BMP280或DHT11都可以,主要是传感器就行,看想传递什么数据;
  3. 有域名的服务器*1,如果不想用域名访问,没有域名也可以;
  4. wife wifi环境
  5. 面包板*1,比较方便改电路;
  6. 导线若干;

电路

传感器 ESP8266
DHT11_PIN D7
BMP_SCK D1
BMP_MISO D6
BMP_MOSI D2
BMP_CS D5
VCC VCC
GND GND

程序

esp8266部分

Arduino编写ESP8266-NodeMCU

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <DFRobot_DHT11.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
/*文件头*/
#define ssid "ssid"//wifi账号
#define password "密码"//wifi密码
#define url_tou "http:/www.你的域名/数据交互网站名称.php"//php文件地址
#define daihao 1 //系统区分号,与其他同代码数据同步
#define DHT11_PIN D7//定义温湿度传感器引脚
#define BMP_SCK D1//定义气压计时钟引脚SCL
#define BMP_MISO D6//定义气压计数据输出引脚SDD
#define BMP_MOSI D2 //定义气压计数据输入引脚SDA
#define BMP_CS D5//定义气压计片选引脚CSB
/*定义通用常数*/
int yue_day[12]={31,28,31,30,31,30,31,31,30,31,30,31};//定义月份日期
String address ="淄博";//上传地址(HeChengURL中使用)
String mima="123456";//密码(HeChengURL中使用)
int cishu=4;//每小时上传次数,60的因数
long toUpDetaTime,inUpDetaTime;
String url;
/*定义通用变量*/
Adafruit_BMP280 bme(BMP_CS,BMP_MOSI,BMP_MISO,BMP_SCK);
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "ntp.ntsc.ac.cn", 28800, 60000);
//(udp,ntp地址,与0时区的时间差{秒},更新间隔{毫秒})
ESP8266WiFiMulti WiFiMulti;
DFRobot_DHT11 DHT;
WiFiClient client;
HTTPClient http;
/*定义函数对象或内容*/
int nianday(int nian)//获取当前年份天数
{if(nian%400==0 || (nian%4==0 && nian%100 !=0))return 365;elsereturn 366;
}
String zhuanhuan(long biaoS)//返回标准时间对应日期{如:20220325}
{int ri,nian,yue,ri_zong,nianday_1;String yeartime;nian=1970,yue=1;//基准日期ri_zong = biaoS/86400+26;//转天数,去剩余秒数,加政令变更nianday_1 = nianday(nian);//获取当前年份天数while(ri_zong < 0 || ri_zong >= nianday_1){if(ri_zong<0){nian--;ri_zong+=nianday(nian);}else{nian++;ri_zong-=nianday(nian);}}if(nian%400==0 || (nian%4==0 && nian%100 !=0))//如果闰年2月28天yue_day[1]=29;while(ri_zong>yue_day[yue-1]){ri_zong-=yue_day[yue-1];yue++;}ri=ri_zong+1;yeartime=(String)nian;yeartime.concat("-");yeartime.concat((String)yue);yeartime.concat("-");yeartime.concat((String)ri);return (yeartime);
}
String HeChengURL(float temp,float pressure,int hum)//合成信息
{String urlNeiBu = url_tou;long biaoS,id;biaoS=timeClient.getEpochTime();//获取标准秒id=(biaoS-1577808000)*10+daihao;//定义id[Unix时间戳-北京时间2020-01-1 00:00:00]urlNeiBu.concat("?id=");urlNeiBu.concat((String) id);urlNeiBu.concat("&address=\"");urlNeiBu.concat(address);urlNeiBu.concat("\"&yeartime='");urlNeiBu.concat(zhuanhuan(biaoS));urlNeiBu.concat("'&daytime='");urlNeiBu.concat(timeClient.getFormattedTime());urlNeiBu.concat("'&temperature=");urlNeiBu.concat(String(temp,3));urlNeiBu.concat("&pressure=");urlNeiBu.concat(String(pressure,3));urlNeiBu.concat("&humidity=");urlNeiBu.concat((String)hum);urlNeiBu.concat("&mima=");urlNeiBu.concat(mima);return urlNeiBu;
}
void toHTTPdeta(){DHT.read(DHT11_PIN);//获取温湿度传感器数据url=HeChengURL(bme.readTemperature(),bme.readPressure(),DHT.humidity);//合成网站和信息{温度,气压,湿度}Serial.println(url);if (http.begin(client, url)) //如果成功启动http访问{  int httpCode = http.GET();//发送HTTP get并获取返回值if (httpCode > 0) //如果返回HTTP信息{Serial.printf("[HTTP] GET... code: %d\n", httpCode);//打印HTTP信息if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {//成功则打印页面信息String payload = http.getString();Serial.println(payload);}} else {Serial.printf("GET错误:%s\n", http.errorToString(httpCode).c_str());}http.end();} else {Serial.printf("连接失败\n");}
}
void setup() {Serial.begin(115200);//打开串口Serial.print("\n");//换行Serial.flush();//清空串口栈WiFi.mode(WIFI_STA);//设置wifi格式为客服端WiFi.begin(ssid,password);//启动wifiwhile(!bme.begin()) {  Serial.println("BMP280未启动!");}while (WiFi.status() != WL_CONNECTED) //重复判定wifi是否成功连接{delay(500);Serial.print(".");}timeClient.begin();//启动标准时间获取程序while(timeClient.getEpochTime()<1577808000){timeClient.update();//清除错误数据delay (1000);}toUpDetaTime=60/cishu-timeClient.getMinutes()%(60/cishu);inUpDetaTime=millis();
}
void loop() {if((millis()-inUpDetaTime)>=(toUpDetaTime*60*1000)){timeClient.update();toUpDetaTime=60/cishu-timeClient.getMinutes()%(60/cishu);inUpDetaTime=millis();toHTTPdeta();}delay(1000);
}

网站PHP程序

本人网站基础架构是利用宝塔搭建网站的CentOS 7

PHP 5.6

接收程序

网站要有sql数据库

<!doctype html>
<?php//设置中文编码格式header('content-type:text/html;charset=utf-8');//接收用户提交过来的数据$addressyuan = $_GET['address'];$yeartime = $_GET['yeartime'];$daytime = $_GET['daytime'];$temperature = $_GET['temperature'];$pressure = $_GET['pressure'];$humidity = $_GET['humidity'];$mima = $_GET['mima'];$id = $_GET['id'];    $address=stripslashes($addressyuan);echo($address);$con=mysqli_connect("localhost","数据库账户名","数据库密码","数据表名"); if (mysqli_connect_errno($con)) { echo "连接 MySQL 失败: " . mysqli_connect_error(); } if ($mima!="123456"){echo($mima);echo("\n");echo($humidity+$temperature);echo("密码错误");}else{$sql    = "insert into huanjingtongjibiao(id,address,yeartime,daytime,temperature,pressure,humidity) values ($id,$address,$yeartime,$daytime,$temperature,$pressure,$humidity)";  // SQL 语句$result = mysqli_query($con, $sql);echo($result);// 从结果集中获取所有数据mysqli_close($con);}
?>
<html>
<head>
<meta charset="utf-8">
<title>内容交互</title>
</head>
<body>
</body>
</html>

查看程序

<!doctype html>
<?php//设置中文编码格式header('content-type:text/html;charset=utf-8');$con=mysqli_connect("localhost","数据库账户名","数据库密码","数据表名"); if (mysqli_connect_errno($con)) { echo "连接 MySQL 失败: " . mysqli_connect_error(); } $sql    = "select address,yeartime,daytime,temperature,pressure,humidity from huanjingtongjibiao order by id desc";  // SQL 语句
?>
<html>
<head>
<meta charset="utf-8">
<title>环境状态</title>
</head>
<body style="text-align:center;display:block;"><table style="text-align: center;margin-right:auto;float:inherit;display:block;" border="1"><tr ><th>地址</th><th>时间</th><th>温度</th><th>压强</th><th>湿度</th></tr><?php//echo($result);// 从结果集中打印所有数据$retval = mysqli_query($con, $sql); //执行//不加判断会报错if (!$retval) {printf("Error: %s\n", mysqli_error($con));exit();}//返回记录数$row_length = mysqli_num_rows($retval);//循环遍历出数据表中的数据for ($i=0; $i<$row_length; $i++) {//从结果集中取得一行作为关联数组$row = mysqli_fetch_assoc($retval);$address = $row['address'];$yeartime = $row['yeartime'];$daytime = $row['daytime'];$temperature = $row['temperature'];$pressure = $row['pressure'];$humidity = $row['humidity'];echo '<tr ><td>'.$address.'</td><td>'.$yeartime.' '.$daytime.'</td><td>'.$temperature.'</td><td>'.$pressure.'</td><td>'.$humidity.'</td></tr>';}; mysqli_close($con);?><a href="index.html">返回主页</a>
</body>
</html>

使用方法

连接烧录好硬件和软件后 撤点开寄
一段时间过后访问"www.域名/路径/查询程序名.php”或者"ip/路径/查询程序名.php”即可查询到数据

基于ESP8266的联网温度监测点相关推荐

  1. 基于物联网的多点温度监控系统(WeMOS D1 WIFI ESP8266 开发板)

    基于物联网的多点温度监控系统 一.设计任务与要求 1. 任务 设计制作基于物联网的多点温度监控系统. 2. 要求 1.实时获取3个被测对象温度,温度测量范围:-55℃ -+125℃:测量精度:0.1℃ ...

  2. 基于ESP8266的阿里云远程实时温度监控

    基于ESP8266的阿里云远程实时温度监控 基于ESP8266的远程实时温度监控 基于ESP8266的远程实时温度监控系统,通过ESP8266开发板采集DHT11温湿度传感器的数据,在连接WIFI接入 ...

  3. 基于ESp8266的智能插座

    基于ESp8266的智能插座 基于ESP8266+STM32F1的智慧生活套件 文章目录 基于ESP8266+STM32F1的智慧生活套件 一.项目背景 二.项目分析 三.产品框架 四.设计思路 五. ...

  4. php与硬件通过wifi对接,基于ESP8266的WiFi排插接入贝壳互联实现天猫精灵控制

    认识众多玩家高手/拆客/DIYer,查阅更多资源,一起学习技术知识 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 本帖最后由 hzy3774 于 2020-1-8 00:45 编辑 * 实验 ...

  5. 基于ESP8266的智能家庭检测系统

    基于ESP8266的智能家庭检测系统 利用空暇时间,做了一个软硬件结合的项目,项目结束了,写篇文章来记录下吧! 目录 基于ESP8266的智能家庭检测系统 绪论 项目背景 项目方法 应用场景 系统总体 ...

  6. 基于ESP8266与51单片机的震动报警器(车辆报警器)(简单向)

    基于ESP8266与51单片机的震动报警器(车辆报警器) 前言 笔者是桂工通信工程的一名在读大学生,在进行课程设计的时候,想要去做一个可以在手机上进行消息提醒的报警器.在传统的声光报警器上有所突破,可 ...

  7. 最简单DIY基于ESP8266的智能彩灯⑥(Android开发通过WIFI控制彩灯实现表白神器)

    ESP8266和ESP32智能彩灯开发系列文章目录 第一篇:最简单DIY基于ESP8266的智能彩灯①(在网页用按钮点亮普通RGB灯) 第二篇:最简单DIY基于ESP8266的智能彩灯②(在网页用按键 ...

  8. 基于ESP8266和WS2812B的智能炫彩灯牌设计

    一 产品介绍 本产品使用esp8266模块和ws2812b灯珠制作了一款wifi控制的智能家居炫彩灯牌.你还可以结合家中的其他物件,对其进行包装,实现各个灯的颜色变化.比如台灯,手电筒等等,甚至你还把 ...

  9. 基于ESP8266与Blinker(点灯科技平台)的智能遥控器设计(四)

    4 接入小爱同学 在点灯科技官网可以看到,BLINKER连接小爱同学的操作主要有 点灯科技官网链接 https://www.diandeng.tech/doc/xiaoai 所以,我们的语音控制只能是 ...

最新文章

  1. 【DIY】200521近期在做的项目小结,DIY进展汇报
  2. 继 承(面向对象特征之二)
  3. DML、DDL、DCL的分别是什么
  4. 操作系统【磁盘调度算法 例题】
  5. Xcode error: conflicting types for 'XXXX'
  6. java模拟登陆_java-模拟登陆练习(示例代码)
  7. PCL中点云可视化:坐标字段、随机、单一颜色、法向量
  8. 高精度加法(简明版C语言),高精度加法(简明版C语言)
  9. pyqt5 不报错退出_Python学习之旅:使用virtualenv创建Python环境及PyQT5环境配置
  10. mq消息落地及业务处理踩坑记录
  11. 多元线性回归分析spss结果解读_多重线性回归的结果解读和报告(SPSS实例教程)...
  12. php关闭notice_屏蔽PHP默认设置中的Notice警告的方法
  13. 使用Scratch制作打弹球游戏(一)弹球游戏过关
  14. 亚马逊卖家问题-02.亚马逊订单等待付款中,这是什么情况?
  15. 这场大雨还没把我浇醒吗?
  16. excel单元格内容拆分_Excel技巧:如何批量合并相同内容单元格?
  17. Spark随笔(三):straggler的产生原因
  18. addEventListener() 的参数之passive 的用法
  19. 计算机组装时各配件的安装顺序,如何组装一台电脑 组装一台电脑配件及步骤【详解】...
  20. 牛客wannaflay挑战赛22 签到题 计数器 Wolf and Rabbit HDU 1222

热门文章

  1. vip163邮箱好用吗?如何注册vip163邮箱?
  2. JiaThis™ - 分享工具
  3. 今年海信或将与夏普争夺全球电视机市场份额第四的位置
  4. 微软惟一许可的美化软件 让XP更像Vista
  5. Pygame(八)事件(1)
  6. 江西小学计算机说课稿,《美丽的家乡》说课稿(江西省省级优课).docx
  7. scatter python cmap_使用matplotlib中scatter方法画散点图
  8. java线程安全的容器类
  9. discuz mobile 接口加载过程
  10. PING命令中TTL的具体含义