文章目录

  • 硬件环境
  • 软件环境
    • 1. WiFi联网和HttpPost配置
    • 2. DHT11温湿度读取和OLED显示配置
    • 3. Web服务器配置(用于接收HTTP数据请求)
  • 实验过程
    • 1. ESP8266 NodeMCU完整代码
    • 2. 服务器Web后台代码运行
    • 3. 实验效果展示

硬件环境

  1. ESP8266开发板一块;
  2. DHT11温湿度传感器一个;
  3. OLED 128*64分辨率显示屏幕一个;

硬件连线图入下所示:

软件环境

1. WiFi联网和HttpPost配置

参照我的另一篇博文,该博文中展示了如何建立PostHttpClient工程,修改后上传数据到公网服务器的Web服务器,
《5. ESP8266使用PostHttpClient例程上传数据给Web服务器后台》。

2. DHT11温湿度读取和OLED显示配置

参照我的另一篇博文,该博文中展示了如何使用ESP8266 NodeMCU开发板获取DHT11温湿度传感器并将数据显示在OLED显示屏上,《4. ESP8266通过OLED实时显示DHT11温湿度参数》。

3. Web服务器配置(用于接收HTTP数据请求)

  • 如果服务器系统为windos,可以参照之前博文《树莓派+传感器+公网服务器 组件自己的物联网平台(三)WEB服务器配置》;

  • 如果服务器系统是Ubuntu,可以根据本人的B站视频同步搭建,B站ID为张三编程分享,地址为:https://space.bilibili.com/243861879,该账号会实时更新服务器配置过程。

Web服务器环境搭建过程最为复杂,如果是小白可以根据B站视频的内容一步步来搭建。
代码的git将Web服务器的代码下载到本地,命令如下:

git clone git@gitee.com:zhousong918/iot_-esp8266.git

Use_Mysql目录下的代码就是Django工程的所有代码,下载后在服务器中运行,需要修改其中的mysql数据库相关信息

实验过程

1. ESP8266 NodeMCU完整代码

将下面代码编程上传到ESP8266 NodeMCU中,代码中只需要修改服务器地址和WiFi相关信息即可

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>#include <DHT.h>                         // Include DHT library code//begin********http head and define***************
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>#define SERVER_IP "116.198.42.221"  //这里是我的公网服务器的IP地址,这个需要修改#ifndef STASSID
#define STASSID "WiFi name"
#define STAPSK  "WiFi password"
#endif
//end********http head and define***************
#define DHTPIN  14// DHT11 data pin is connected to ESP8266 GPIO14 (NodeMCU D5)
#define DHTTYPE DHT11// DHT11 sensor is used
DHT dht(DHTPIN, DHTTYPE);             // Configure DHT librarychar temperature[] = "00.0";
char humidity[]    = "00.0";// OLED FeatherWing buttons map to different pins depending on board.
// The I2C (Wire) bus may also be different.
#if defined(ESP8266)#define BUTTON_A  0#define BUTTON_B 16#define BUTTON_C  2#define WIRE Wire
#elif defined(ESP32)#define BUTTON_A 15#define BUTTON_B 32#define BUTTON_C 14#define WIRE Wire
#elif defined(ARDUINO_STM32_FEATHER)#define BUTTON_A PA15#define BUTTON_B PC7#define BUTTON_C PC5#define WIRE Wire
#elif defined(TEENSYDUINO)#define BUTTON_A  4#define BUTTON_B  3#define BUTTON_C  8#define WIRE Wire
#elif defined(ARDUINO_FEATHER52832)#define BUTTON_A 31#define BUTTON_B 30#define BUTTON_C 27#define WIRE Wire
#elif defined(ARDUINO_ADAFRUIT_FEATHER_RP2040)#define BUTTON_A  9#define BUTTON_B  8#define BUTTON_C  7#define WIRE Wire1
#else // 32u4, M0, M4, nrf52840 and 328p#define BUTTON_A  9#define BUTTON_B  6#define BUTTON_C  5#define WIRE Wire
#endifAdafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &WIRE);void setup() {Serial.begin(9600);Serial.println("OLED FeatherWing test");// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internallydisplay.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Address 0x3C for 128x32//display.begin(SSD1306_SWITCHCAPVCC, 0x3D);  // initialize with the I2C addr 0x3D (for the 128x64)Serial.println("OLED begun");// Show image buffer on the display hardware.// Since the buffer is intialized with an Adafruit splashscreen// internally, this will display the splashscreen.display.display();delay(1000);// Clear the buffer.display.clearDisplay();display.display();Serial.println("IO test");pinMode(BUTTON_A, INPUT_PULLUP);pinMode(BUTTON_B, INPUT_PULLUP);pinMode(BUTTON_C, INPUT_PULLUP);// text display testsdisplay.setTextSize(1);display.setTextColor(SSD1306_WHITE);dht.begin();                // Initialize the DHT library// Clear the display buffer.display.clearDisplay();display.setTextSize(1);display.setTextColor(WHITE, BLACK);display.setCursor(10, 5);display.print("DHT11 TEMPERATURE:");display.setCursor(19, 37);display.print("DHT11 HUMIDITY:");display.display();//begin************WiFi Setup*****************WiFi.begin(STASSID, STAPSK);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println("");Serial.print("Connected! IP address: ");Serial.println(WiFi.localIP());//end************WiFi Setup*****************
}void loop() {// Read humiditybyte RH = dht.readHumidity();//Read temperature in degree Celsiusbyte Temp = dht.readTemperature();temperature[0] = Temp / 10 + '0';temperature[1] = Temp % 10 + '0';humidity[0]    = RH / 10   + '0';humidity[1]    = RH % 10   + '0';// print data on serial monitorSerial.printf("Temperature = %02u°C\r\n", Temp);Serial.printf("Humidity    = %02u %%\r\n\r\n", RH);// Clear the display buffer.display.clearDisplay();// print data on the SSD1306 displaydisplay.setTextSize(1);display.setTextColor(WHITE, BLACK);display.setCursor(10, 5);display.print("DHT11 TEMPERATURE:");display.setCursor(19, 37);display.print("DHT11 HUMIDITY:");display.display();display.setCursor(46, 20);display.print(temperature);display.setCursor(46, 52);display.print(humidity);display.drawRect(71, 20, 3, 3, WHITE);     // Put degree symbol ( ° )display.display();//begin********HttpPost wait for WiFi connectionif ((WiFi.status() == WL_CONNECTED)) {WiFiClient client;HTTPClient http;Serial.print("[HTTP] begin...\n");// configure traged server and urlhttp.begin(client, "http://" SERVER_IP "/IOT/add_environments"); //HTTPhttp.addHeader("Content-Type", "application/x-www-form-urlencoded");Serial.print("[HTTP] POST...\n");// start connection and send HTTP header and bodyString content = "temperatures=";String str2 = temperature;String str3 = "&humidity=";String str4 = humidity;String str5 = "&pressure=111";content.concat(str2);content.concat(str3);content.concat(str4);content.concat(str5);//const String content = "temperatures=" + temperature + "&humidity=" + humidity +"&pressure=111";int httpCode = http.POST(content);// httpCode will be negative on errorif (httpCode > 0) {// HTTP header has been send and Server response header has been handledSerial.printf("[HTTP] POST... code: %d\n", httpCode);// file found at serverif (httpCode == HTTP_CODE_OK) {const String& payload = http.getString();Serial.println("received payload:\n<<");Serial.println(payload);Serial.println(">>");}} else {Serial.printf("[HTTP] POST... failed, error: %s\n", http.errorToString(httpCode).c_str());}http.end();}//end********HttpPost wait for WiFi connectiondelay(5000);
}

2. 服务器Web后台代码运行

使用git将代码下载到本地,修改一下settings.py文件中的数据库配置信息,进入Use_Mysql目录,运行如下命令:

cd Use_Mysql/
sudo python3 manage.py runserver 0.0.0.0:80


数据库中增加的环境数据:

Web服务器接收到的来自ESP8266的HttpPost请求:

前端的get_environments请求:

3. 实验效果展示

通过前端地址访问:http://116.198.42.221/IOT/get_environments/
前端展示效果:

ESP8266 + DHT11 + OLED 展示效果:

整体效果图:

视频展示:

毕业设计--ESP8266自建联网温湿度监控系统

6. 毕业设计温湿度监控系统(ESP8266 + DHT11 +OLED 实时上传温湿度数据给公网服务器并在OLED显示屏上显示实时温湿度)相关推荐

  1. ESP8266自动上传DHT11数据给javaweb服务器的温湿度监控系统的设计与实现

    系列文章目录 第一章ESP8266的java软件仿真测试 第二章ESP8266硬件与软件测试 第三章ESP8266客户端与Java后台服务器联调 第四章ESP8266客户端与JavaWeb服务器联调 ...

  2. 环境温湿度监控系统(51+DHT11+1602液晶)

    环境温湿度监控系统(51+DHT11+1602液晶) 使用模块: DHT11 Datasheet:https://www.alldatasheetcn.com/datasheet-pdf/pdf/11 ...

  3. 物联网毕业设计-基于stm32的温湿度监控系统

    一.引言 近年来,随着科技的进步,计算机和电子技术在各个领域的应用越来越广泛,人们对温湿度的要求也越来越高.现在用于食品.药品和环境监测的仪器.仪表和计算机等设备越来越多,它们与人们生产.生活的关系越 ...

  4. 基于stm32、Android和Html的温湿度监控系统的设计

    系列文章目录 第一章ESP8266的java软件仿真测试 第二章ESP8266硬件与软件测试 第三章ESP8266客户端与Java后台服务器联调 第四章ESP8266客户端与JavaWeb服务器联调 ...

  5. 基于单片机的粮仓温湿度监控系统

    设计简介: 本设计是基于单片机的粮仓温湿度监控系统,主要实现以下功能: 可通过LCD1602显示时间以及温湿度.烟雾浓度.模式: 可通过按键手动控制制冷和除湿: 可通过按键调整时间.温湿度和烟雾浓度的 ...

  6. ESP32-CAM高性价比温湿度监控系统

    ESP32-CAM ArduinoIDE开发系列文章目录 第一篇:ESP32-CAM高性价比WIFI图传方案快速入门教程 第二篇:ESP32-CAM第一个无线点灯程序 第三篇:ESP32-CAM智能网 ...

  7. 【嵌入式Linux应用开发】温湿度监控系统——多线程与温湿度的获取显示

    1. 概述 ​ 在前几篇的文章中,我们已经学习了LVGL界面绘制以及paho mqtt的同步客户端和异步客户端的操作,那么本篇就会综合前面的知识,加上Linux系统的多线程以及线程间通信的知识,将LV ...

  8. 【嵌入式Linux应用开发】温湿度监控系统——绘制温湿度折线图

    1. 概述 ​ 本篇的主要内容是使用SquareLine Studio绘制一个显示温湿度曲线图的表格,将其移植到100ASK STM32MP157开发板上显示,效果图如图所示: 温湿度监控系统应用开发 ...

  9. 智慧档案馆之档案库房温湿度监控系统方案

    智慧档案馆之档案库房温湿度监控系统方案 其他档案库房八防.档案库房十防环境监控系统相关:自动化恒温恒湿消毒净化系统.防火防盗系统.漏水视频门禁监控系统.防虫防鼠系统.短信声光报警系统均可做成一个大数据 ...

最新文章

  1. 【点云论文速读】点云高质量3D表面重建
  2. java开发用amd处理器_HBase1.x实战:协处理器Java开发实例--ObserverCoprocessor
  3. Python并非为AI而生,Golang将统治人工智能的下一个十年?
  4. 重磅!!kaggle训练, 终于不用怕断网了
  5. HarmonyOS之设备定位的使用与地理编码的转化
  6. Ubunt中卸载protobuf与安装3.6.0版本步骤
  7. Matlab各种最值问题
  8. Oracle存储过程procedure in、out、in out 模式参数【不发布,纯转】
  9. 前后端敏感数据加密方案及实现_01
  10. OpenCV-Python实战(番外篇)——OpenCV、NumPy和Matplotlib直方图比较
  11. 易语言-数据类型及其长度
  12. java基础---Java---面试题---银行业务调度系统(线程同步锁、枚举、线程池)
  13. J2EE是什么,主要包括哪些技术
  14. 路由器设置虚拟服务器utorrent,路由器用户PT站“可连接:否”最简解决办法
  15. ai形状生成工具机器人_一名大学生使用一种语言生成AI工具来创建病毒博客文章...
  16. 计算机数字键盘无法输入数字,电脑数字键打不出数字怎么办?电脑数字键打不出数字的修复方法...
  17. Debug Blocker
  18. npm start 报错解决方案
  19. Kafka mirroring (MirrorMaker) 和 uReplicator 快速开始
  20. 只有真正将产业互联网看成是一种嬗变的过程,才能把握其精髓和原始奥义

热门文章

  1. pytorch 句子相似度
  2. 好记又实用的获取电脑型号方法
  3. 使用SD卡扩展BBB文件系统存储空间
  4. 【渝粤教育】电大中专电子商务网站建设与维护 (16)作业 题库
  5. 【转】经济学入门经典书籍推荐
  6. 利用ffmpeg录制rtsp流的方法总结(一)
  7. 京东首页制作html+css+js
  8. 基于nginx实现二维码下载安装app
  9. 可以替代PLC-ANALYZER、IBA进行数据记录、分析的PLC-Recorder软件
  10. Game推荐:Factorio