# 前言

使用 Siri 来获取当前的温度和湿度是不是很有 B 格?其实几十行代码就可以做到,原理就是使用 esp8266 做一个 HttpServer , 使用 Siri 来访问某个路由,访问的时候读取当前的温湿度数据即可.

当前使用的温湿度传感器是 dht11 , 也可以使用 dht22 , 更精准一点而已.

# 写点代码

p
#include <string>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include "DHT.h"
// 定义 dht 数据位为 gpio5,开发板不一样则该设置不一样
#define DHTPIN 5
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// 定义 wifi 名称和密码
const char* ssid = "HUAWEI-KTT6S5_HiLink";
const char* password = "15008683399lwp";
// 设置 led 灯的 gpio
const int led = 2;
// 创建一个 WebServer 监听 80 端口
ESP8266WebServer server(80);
void handleRoot(){
  const String Html = "<!DOCTYPE html>\
    <html>\
      <head>\
        <meta charset=\"utf-8\">\
        <title>Hello ESP8266!</title>\
      </head>\
      <body>\
        <h1>看到的这个网页为ESP8266提供<h1>\
      </body>\
    </html>";
  digitalWrite(led,1);
  server.send(200,"text/html",Html);
  digitalWrite(led,0);
}
void handleNotFound(){
  digitalWrite(led, 1);
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  digitalWrite(led, 0);  
}
// 获取温湿度数据
void getTemperature(){
  digitalWrite(led,0);  
  // 湿度
  float h = dht.readHumidity();
  // 温度
  float t = dht.readTemperature();
  String Html = "<!DOCTYPE html>\
    <html>\
      <head>\
        <meta charset=\"utf-8\">\
        <title>温湿度</title>\
      </head>\
      <body>\
  ";
  if (isnan(h) || isnan(t)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    Html += "温湿度读取失败";
    server.send(200,"text/html",Html);
    digitalWrite(led,1);
    return;
  }
  char t_str[20];
  char h_str[20];
  sprintf(t_str,"%2.1f",t);
  sprintf(h_str,"%2.0f",h);
  String t_string = t_str;
  String h_string = h_str;
  Html += "当前温度: "+t_string+" 摄氏度。湿度:百分之"+h_string;
  Html += "</body>\
    </html>";
  server.send(200,"text/html;charset=utf-8;",Html);
  digitalWrite(led,1);
}
void setup() {
  Serial.begin(115200);
  dht.begin();
  // 设置 led 为输出模式
  pinMode(led,OUTPUT);
  digitalWrite(led,1);
  // 设置 Wifi 连接模式为 STA
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid,password);
  while(WiFi.status() != WL_CONNECTED){
    Serial.print(".");
    delay(2000);
  }
  server.on("/",handleRoot);
  server.on("/get",getTemperature);
  server.onNotFound(handleNotFound);
  server.begin();
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());  
}
void loop() {
  server.handleClient();
}

# 上电测试

上电测试一下,访问 http://192.168.1.43/get , 如期返回了温湿度数据.

温湿度数据

# 使用 Siri 读取温湿度

苹果 IOS 系统的捷径功能的自定义化程度非常高,可以借助捷径功能读取到温湿度数据并且朗读出来.

以下是我的一个简单设置
捷径

保存,然后对着手机说 "Siri, 告诉我温度和湿度", 短短 100 行代码实现了一个最简单的智能家居小应用,还是很简单吧

请我喝杯[咖啡]~( ̄▽ ̄)~*

一个放羊娃 微信支付

微信支付

一个放羊娃 支付宝

支付宝