上一篇博客,这次还是关于 esp8266 --> 物联网

一、云端数据监控:DHT11 + NodeMcu +Dweet.io

  1. 接上一篇博客的接线及相关配置不变( DHT11 + NodeMcu )
  2. 配置 Dweet.io

Dweet.io 是一个可以通过非常简易的方式为物联网设备提供通信服务(包括报警等)的云端平台。它不需要任何的设置或注册步骤,只要终端设备连接上互联网,即可直接发布或订阅数据。

通过 Dweet.io 提供的云端服务,可以很方便的将传感器数据发布到在线平台并实时地进行远程监控。

  • Dweeting(发送数据到云端)

    • 调用URL: https://dweet.io/dweet/for/my-thing-name?hello=world&foo=bar
  • Get Dweeting

    • 获取最新发布的 dweet : https://dweet.io/get/latest/dweet/for/my-thing-name
    • 获取某个名字下所有的 dweets : https://dweet.io/get/dweets/for/my-thing-name
$ http -b "https://dweet.io/get/dweets/for/rollingstarky"
{
"by": "getting",
"the": "dweets",
"this": "succeeded",
"with": [
{
"content": {
"foo": "bar",
"hello": "world"
},
"created": "2020-09-25T16:30:34.524Z",
"thing": "rollingstarky"
},
{
"content": {
"foo": "bar",
"hello": "world"
},
"created": "2020-09-25T16:10:46.694Z",
"thing": "rollingstarky"
}
]
}
  1. 项目代码

    把上篇博客的数据传送到 Dweet.io 云端平台
#include <ESP8266WiFi.h>
#include "DHT.h" // WiFi parameters
const char* ssid = "wifi-name";
const char* password = "wifi-password"; #define DHTPIN 5 #define DHTTYPE DHT11 // Initialize DHT sensor
DHT dht(DHTPIN, DHTTYPE, 15); const char* host = "dweet.io"; void setup() { Serial.begin(115200);
delay(10); dht.begin(); // Connecting to a WiFi network
Serial.println();
Serial.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());
} void loop() { Serial.print("Connecting to ");
Serial.println(host); // Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
} // Reading temperature and humidity
float h = dht.readHumidity();
float t = dht.readTemperature(); while (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
delay(2000); // Get the measurements once more
h = dht.readHumidity();
t = dht.readTemperature();
} Serial.println();
Serial.println("The temperature and humidity are:");
Serial.println(t);
Serial.println(h); // Send the request to the server
client.print(String("GET /dweet/for/rollingstarkyesp8266?temperature=") + String(t) + "&humidity=" + String(h) + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
} // Read all the lines of the reply from server and print them to Serial
while(client.available()){
String line = client.readStringUntil('\r');
Serial.print(line);
}
Serial.println();
Serial.println("closing connection");
Serial.println(); // Repeat every 10 seconds
delay(10000);
}
  • 访问最新更新的数据:https://dweet.io/get/latest/dweet/for/rollingstarkyesp8266

{"this":"succeeded","by":"getting","the":"dweets","with":[{"thing":"rollingstarkyesp8266","created":"2020-09-25T09:27:22.823Z","content":{"temperature":28,"humidity":61}}]}

  • 访问全部数据:https://dweet.io/get/dweets/for/rollingstarkyesp8266

{"this":"succeeded","by":"getting","the":"dweets","with":[{"thing":"rollingstarkyesp8266","created":"2020-09-25T09:17:04.292Z","content":{"temperature":27.9,"humidity":58}},{"thing":"rollingstarkyesp8266","created":"2020-09-25T09:15:08.961Z","content":{"temperature":27.9,"humidity":59}},{"thing":"rollingstarkyesp8266","created":"2020-09-25T09:13:16.383Z","content":{"temperature":27.9,"humidity":58}},{"thing":"rollingstarkyesp8266","created":"2020-09-25T09:11:30.363Z","content":{"temperature":27.9,"humidity":57}},{"thing":"rollingstarkyesp8266","created":"2020-09-25T09:09:43.309Z","content":{"temperature":27.9,"humidity":57}}]}

  • 访问可视化图表:http://dweet.io/follow/rollingstarkyesp8266

    • 这里有点见鬼,出不来,单数据应该是都到云端了,可以查到 Json 数据(假装有图有真相)

  1. 链接 freeboard 平台(仪表盘)
  • 注册
  • 懂点英语,稍微摸索一下

二、远程控制物联网设备:NodeMcu + PubSubClient + aREST

1.准备工具

  • aREST 库

aREST 框架可以为一些常见的嵌入式开发板提供 RESTful 接口,支持通过串口、Wi-Fi、以太网、蓝牙等硬件发送命令至开发板,激发特定的操作,并将数据以 JSON 的格式返回给控制端用户

  • PubSubClient 库
  1. 源代码
// Import required libraries
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <aREST.h> // Clients
WiFiClient espClient;
PubSubClient client(espClient); // Create aREST instance
aREST rest = aREST(client); // Unique ID to identify the device for cloud.arest.io
char* device_id = "wuwu380"; // WiFi parameters
const char* ssid = "wifi-name";
const char* password = "wifi-password"; // Callback functions
void callback(char* topic, byte* payload, unsigned int length); void setup(void)
{
// Start Serial
Serial.begin(115200); // Set callback
client.setCallback(callback); // Give name and ID to device
rest.set_id(device_id);
rest.set_name("devices_control"); // Connect to WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected"); // Set output topic
char* out_topic = rest.get_topic();
} void loop() { // Connect to the cloud
rest.handle(client);
} // Handles message arrived on subscribed topic(s)
void callback(char* topic, byte* payload, unsigned int length) {
rest.handle_callback(client, topic, payload, length);
}
  1. 运行结果

$ http -b https://cloud.arest.io/wuwu380/name

{

"connected": true,

"hardware": "esp8266",

"id": "wuwu380",

"name": "devices_control",

"variables": {}

}

$ http -b https://cloud.arest.io/wuwu380/mode/5/o

{

"connected": true,

"hardware": "esp8266",

"id": "wuwu380",

"message": "Pin D5 set to output",

"name": "devices_control"

}

$ http -b https://cloud.arest.io/wuwu380/digital/5/1

{

"connected": true,

"hardware": "esp8266",

"id": "wuwu380",

"message": "Pin D5 set to 1",

"name": "devices_control"

}

三、 esp8266 连接 OLED 屏,制作天气时钟

我一开始就想做这个了,一开始当成终极目标,现在看看,九折水瓶

  1. 必要组件
  • U8G2 屏幕驱动库
  • 可以去 Ardunio 下载,也可以把 U8g2.rar 解压到 libraries 文件夹
  1. 接线

| OLED | NodeMcu |

| : - : | : - : |

| GND | GND |

| VCC | 3V3/5V |

| SCL | D1 |

| SDA | D2 |

  1. 载入程序

    文件 - 示例 - U8G2 - full_buffer - 任意打开一个,去除下行代码的注释

    U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // All Boards without Reset of the Display

    写入程序

一切的学习,都是从 hello world 开始的[Doge]

利用 esp8266 搭建简单物联网项目的更多相关文章

  1. Angular01 利用grunt搭建自动web前端开发环境、利用angular-cli搭建web前端项目

    搭建angular开发环境 一.下载并安装node 官网地址:点击前往 二.利用npm安装cnpm 安装好node后就可以使用npm命令啦 查看版本:npm -v 安装cnpm:npm install ...

  2. 从零开始利用vue-cli搭建简单音乐网站(一)

    最近在学习vue框架,练习了一些例子之后,想着搭建一个vue项目,了解到官方有提供一个vue-cli工具来搭建项目脚手架,尝试了一下,写下博客来记录一下. 一.工具环境 1.node.js 6.10. ...

  3. django搭建简单开发项目流程(一)

    1 搭建环境 sudo apt-get install python3-pip 安装pip3 sudo pip3 install virtualenv 安装虚拟环境 virtualenv -p pyt ...

  4. java maven、springmvc、mybatis 搭建简单Web项目学习笔记

    前言: 空余的时间,学学 Java,没准哪天用的到: 环境搭建折腾了好几天,总算搞顺了,也做个学习笔记,以防后面会忘记: 一.安装文件及介绍 JDK:jdk1.8.0 77 eclipse-maven ...

  5. 从零开始利用vue-cli搭建简单音乐网站(八)

    这是完成了预想中的最后两个功能:歌曲评论以及歌曲搜索. 1.评论效果: 用户点击评论按钮,评论框获取焦点. 输入之后点击提交,下方显示评论,用户名称以及日期.相应的用户也可以删除自己评论. 当然只能删 ...

  6. 从零开始利用vue-cli搭建简单音乐网站(六)

    上一篇遗漏了一个简单的效果没写,见下图: 主页面点击热门推荐和更多之后跳转到歌曲列表页面,现在的页面只是简单的把所有歌曲列出来,没有进行排序.实现起来也很简单,在MainPage的两个链接上添加: & ...

  7. 从零开始利用vue-cli搭建简单音乐网站(五)

    上一篇文章讲到的是如何利用mongoose从数据库读取数据然后更新页面,接下来要实现的就是用户注册登录功能,这个功能涉及到的东西太多了,今天只实现了登录功能,登陆之后更新导航条界面,最后效果如下: 登 ...

  8. 从零开始利用vue-cli搭建简单音乐网站(四)

    上一篇文章中说到这一篇博客会实现音乐播放功能,只是令我意外的是,如果利用h5的audio标签,几行代码就实现了......先来看一下最终效果吧. 这里直接用了audio标签,样式没有怎么管,能获得音乐 ...

  9. 从零开始利用vue-cli搭建简单音乐网站(二)

    1.利用vue-router实现页面跳转 程序可以正常运行之后,下面我们需要配置路由实现页面的局部刷新,这一功能将用来实现网站页面的跳转. 打开程序目录,进入"src\router\inde ...

随机推荐

  1. 企业站如何做长尾关键词seo优化

    http://www.wocaoseo.com/thread-315-1-1.html     很多企业站,优化到一定程度后网站的流量很快就上去了,但是之后网站就无法更进一步.那么对于普通中小型企业站 ...

  2. Kubernetes Operator基础入门

    本文转自Rancher Labs 你是否曾经想过SRE团队是如何有效地成功管理复杂的应用?在Kubernetes生态系统中,Kubernetes Operator可以给你答案.在本文中,我们将研究Op ...

  3. Android Studio从Eclipse导项目

    要是你只下了Android Studio 就不能用Eclipse导出gradle项目了 可以直接使用Android Studio导入模块,在Android Studio里Project算Eclipse ...

  4. jkd1.8 stream

    目录 Stream 创建流 通过集合创建,例如Map (常用) 通过数组方式创建 通过Stream静态方法创建 中间操作 筛选和切片 filter limit skip distinct 映射 map ...

  5. Oracle RAC与DG

    RAC RAC: real application clustersrac RAC: real application clustersrac 单节点数据库:数据文件和示例文件一一对应 实例损坏时数据 ...

  6. Codehorses T-shirts (map+遍历)

    Codehorses has just hosted the second Codehorses Cup. This year, the same as the previous one, organ ...

  7. 9.深入k8s:调度器及其源码分析

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 这次讲解的是k8s的调度器部分的代码,相对来说比较复杂,慢慢的梳理清 ...

  8. 组件给App全局传值vue-bus的使用

    npm安装 npm install vue-bus main.js引入 import VueBus from 'vue-bus' Vue.use(VueBus) 组件 getHouse(e){ thi ...

  9. JQuery生成图片列表

    <!DOCTYPE html> <html> <head> <title>生成图片列表</title> <style type=&qu ...

  10. 关于Vuex的那些事儿

    vuex vuex是一个专门为Vue.js应用程序开发的状态管理模式,集中式的存储应用的所有组件的状态 以相应的规则保证状态以一种可预测的方式发生变化 单向数据流 State:驱动应用的数据源(单向数 ...