prefacio
Antes de que usted está interesado en el conocimiento de las cosas, muy ocupado recientemente debido a la epidemia en el país, sino que también vio una serie de vídeos relacionados intentará tratar
listo
hardware
ESP-01s y con su firmware escritor, la temperatura DHT11 y sensor de humedad
Plataforma de desarrollo
Arduino IDE, dweet, número público de micro-canales plataforma de desarrollo
lenguaje de desarrollo
c ++, php
c ++ biblioteca necesaria
DHT.h, dweetESP8266.h necesidad de descarga y añadir el siguiente en la prensa github
proceso
En primer lugar, la idea es leer la DHT temperatura y la información de la humedad -> a la dweet Internet -> establece la tarea del servidor de tiempo, sincronización de los datos escritos en el dweet acceso a continuación, iniciar sesión -> se devuelve leer datos de registro cuando el número de consulta pública
(más que el paso intermedio cronometrados tarea, porque es dweet sitios web extranjeros, la velocidad de acceso es demasiado lento, el número de la respuesta del público a través del tiempo en el error ...)
Parte del código en cuestión
Código no da el todo sólo para, de hecho, parte, muy simple, a lo largo de las líneas es fácil de lograr
c ++:
#include "DHT.h"
#include "dweetESP8266.h"
char ssid[] = "";//wifi 名
char pswd[] = "";//wifi 密码
#define DHTPIN 2 //定义DHT11模块连接管脚io2
#define DHTTYPE DHT11 // 使用DHT 11温度湿度模块
#define THIG_NAME "xxx" //指定dweet的标题
dweet dweetClient; //定义dweet
DHT dht(DHTPIN, DHTTYPE); //定义dht
void setup() {
Serial.begin(115200);
dht.begin();
dweetClient.wifiConnection(ssid, pswd);
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
dweetClient.wifiConnection(ssid, pswd);
dweetClient.add("dht", String(h) + "," + String(t));
dweetClient.sendAll(THIG_NAME);
delay(3000);
}
Establecer trabajo cron crond:
*/2 * * * * /usr/bin/curl -o /home/cron/iot/dht.txt https://dweet.io/get/latest/dweet/for/xxx
Los resultados proporcionados aquí cada dos minutos por el rizo de escritura adquirida /home/cron/iot/dht.txt
en
php:
// 当用户向公众号发送关键字 '家里温湿度' 时,读取日志并返回数据的逻辑
if ($keyword == '家里温湿度') {
$path = '/home/cron/iot/dht.txt';
$oldData = json_decode(file_get_contents($path), true);
if(empty($oldData) || $oldData['this'] == "failed") {
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, "设备可能存在异常");
echo $resultStr;
}
$str = explode(",", $oldData['with'][0]['content']['dht']);
$humidity = $str[0];
$temperature = $str[1];
$contenStr = "湿度:" . $humidity . "%\r\n" . "温度:" . $temperature . "℃\r\n";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $contenStr);
echo $resultStr;
}
hoyo escalonada
1. No capaz de encontrar la biblioteca ArduinoJson (resueltos) en tiempo de compilación
Solución:
dweet esta biblioteca con la versión 5. ArduinoJson * de la biblioteca, por lo que es necesario descargar la versión 5. *, debido a que la función con dweet por encima de donde la llamada es la versión 5. *. . .
descargar
2. El dispositivo no puede continuar enviando datos a la dweet (Resuelto)
Dado que el servidor está en el extranjero, de vez en cuando, cuando los datos postales en tiempo extra, después de publicar sus variables para bloquear la
solución:
Modificar el comienzo descargan dweetESP8266
código de archivo de la biblioteca
dweetESP8266.cpp
:
165 while(!_client.available());
166 while (_client.available()){
168 char c = _client.read();
169 Serial.write(c);
}
Eliminar esta sección de código, y devuelve el resultado no ha leído en la línea. Porque antes de que la tarjeta haya sido devuelto porque esperar a leer los resultados, ahora eliminado, la información que tiró y salió corriendo, por lo que no va a tapar vivo