天心区网站建设公司宁波的网络营销服务公司
目录
一、前言
二、工具
三、原理
四、代码实现
1、esp8266的使用
2、ds18b20的使用
前提:
3、oled屏使用
4、光敏传感器使用
五、网页使用
六、总结
效果演示
esp8266物联网测试
一、前言
基于物联网课设设计的小项目,可供参考。
本项目使用ESP8266作为主控器实现一个简单的测温系统,主要功能有:测量环境温度并在屏幕上显示,实现昼夜更换减少耗能,超过温度会报警。
数据是基于MQTT协议通信的,作者想编写一个MQTT协议的APP,但是难度过大,并且没接触过android studio,所以用一个可以接受MQTT的网站来实现数据收集。
二、工具
arduino ide
esp32(esp8266)单片机
ds18b20温度传感器
OLED显示屏
光敏传感器
物联网网站
三、原理
esp8266读取ds18b20数据并发布到指定话题,读取光敏传感器的状态来检测昼夜变换来实现系统的关闭与开启(白天关闭 False/0 夜晚开启 True/1),并在oled上显示温度和状态,并且可以在网页端查看数据和状态。
四、代码实现
1、esp8266的使用
作者使用的是arduino ide进行代码上传的,相关代码可以看博主前几篇文章
学习使用Arduino IDE驱动ESP8266/32单片机进行wifi通信-CSDN博客文章浏览阅读685次,点赞18次,收藏12次。官网下载arduino ide准备一个esp8266单片机或esp32。通过arduino 进行esp8266的驱动和wifi通信。https://blog.csdn.net/2301_76165902/article/details/146050322?fromshare=blogdetail&sharetype=blogdetail&sharerId=146050322&sharerefer=PC&sharesource=2301_76165902&sharefrom=from_link对于wifi和MQTT通信的基本操作都有写。
2、ds18b20的使用
前提:
安装库「OneWire」
头文件为
#include <OneWire.h>
网上好多教程都安装了「DallasTemperature」库或者ds18b20集成库,作者安装后在最新版arduino上编译不通过,只有OneWire原始库来驱动传感器才能编译通过,作者不知道原因,可能使编译器版本太新导致的,如果有解决办法欢迎评论区讨论。
作者使根据示例 DS18x20_Temperature 文件去修改的
float DS18B20()
{byte i;byte type_s = 0;byte data[9];byte addr[8];float celsius;while( !ds.search(addr));ds.reset();ds.select(addr);ds.write(0x44, 1); // start conversion, with parasite power on at the enddelay(100); // maybe 750ms is enough, maybe not// we might do a ds.depower() here, but the reset will take care of it.ds.reset();ds.select(addr); ds.write(0xBE); // Read Scratchpadfor ( i = 0; i < 9; i++) { // we need 9 bytesdata[i] = ds.read();Serial.print(data[i], HEX);Serial.print(" ");}int16_t raw = (data[1] << 8) | data[0];if (type_s) {raw = raw << 3; // 9 bit resolution defaultif (data[7] == 0x10) {// "count remain" gives full 12 bit resolutionraw = (raw & 0xFFF0) + 12 - data[6];}} else {byte cfg = (data[4] & 0x60);// at lower res, the low bits are undefined, so let's zero themif (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 mselse if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 mselse if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 msdefault is 12 bit resolution, 750 ms conversion time}celsius = (float)raw / 16.0;Serial.print(" Temperature = ");Serial.println(celsius);return celsius;
}
返回值为温度(摄氏度)
如果有不懂的地方可以去示例中查看。
3、oled屏使用
头文件为
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
去管理库里安装相应的依赖
参数设置
const int I2C_ADDR = 0x3c; // oled屏幕的I2c地址
#define SDA_PIN 4 // SDA引脚,默认gpio4(D2)
#define SCL_PIN 5 // SCL引脚,默认gpio5(D1)Adafruit_SSD1306 oled(128, 64, &Wire,-1);
初始化
oled.begin(SSD1306_SWITCHCAPVCC,0x3C);oled.setTextColor(WHITE);//开像素点发光oled.clearDisplay();//清屏
显示文字
oled.setTextSize(1); //设置字体大小 oled.setCursor(35, 5);//设置显示位置oled.println("-jiezz-");oled.display(); // 开显示
在回调函数里显示温度
for (int i = 0; i < length; i++) {Serial.print((char)payload[i]);oled.setCursor(15+i*12, 30);//设置显示位置oled.println((char)payload[i]);oled.display(); // 开显示}
这里的位置如果不懂就去网上查一查不同尺寸显示屏的参数,长和宽。
4、光敏传感器使用
光敏电阻通过光强来改变带电阻改变输出电压。
上面有四个引脚VCC,GND,AO(模拟输出),DO(数字输出),只用DO即可,会在光强时输出0,光弱时输出1,阈值可以通过电位器去调节。
简单的用一个引脚去读取即可
pinMode(D3,INPUT);Serial.println(digitalRead(D3));
可是充当系统的状态量
这些传感器都驱动好了,之后就是整合完成通信即可。
如果需要完整代码可以私信博主,这里就不占篇幅了。
五、网页使用
(公测)KZone喵星球 - 探索AI与编程的乐趣
添加三个话题
/esp8266/wendu 存放温度
/esp8266/state 存放状态
/esp8266/msg 存放信息
在可视化面板添加温度测量
右侧绑定话题
添加一个状态灯,绑定state话题
再添加一个输入框,可以和oled进行交互显示
到这里就能完成系统的基本功能了
六、总结
对于云平台可以用阿里云或者腾讯云这些包装好的服务器,会提供app或者小程序使用,可视化效果更好,如果有需要可以试一试,本项目只是娱乐,无任何用途。
如果有问题请评论区指正。