Arduino 传感器 API 网络服务器
Arduino Sensor API Webserver
当我将此代码加载到我的 Arduino 时,他连接到 WiFi 并出现在我的 IP 扫描仪上。但是当我在 FireFox 中打开设备的 IP 时,没有任何加载。 (http://10.0.0.40/env) 我的代码是否有问题,或者它不是这样工作的。我有一个读取温度和湿度的传感器。这两个值应该在我的网络中可用于 fetch()。使用 Javascript 我想在我的本地 html 页面上显示这些。网络凭据刚刚被审查。
#include <ArduinoJson.h>
#include <WiFi.h>
#include <WebServer.h>
#include <DHT.h>
#define DHTPIN 13
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
const char *ssid = "XXX";
const char *pwd = "XXX";
StaticJsonDocument<250> jsonDocument;
char buffer[250];
float temperature;
float humidity;
WebServer server(80);
void connectToWiFi() {
Serial.print("Connect to: ");
Serial.println(ssid);
WiFi.begin(ssid, pwd);
while (WiFi.status() !=WL_CONNECTED){
Serial.print(".");
delay(1000);
}
Serial.print("Connected. IP: ");
Serial.println(WiFi.localIP());
}
void setup_routing(){
server.on("/temperature", getTemperature);
server.on("/humidity", getHumidity);
server.on("/env", getEnv);
server.begin();
}
void create_json(char *tag, float value, char *unit){
jsonDocument.clear();
jsonDocument["type"] = tag;
jsonDocument["value"] = value;
jsonDocument["unit"] = unit;
serializeJson(jsonDocument, buffer);
}
void add_json_object(char *tag, float value, char *unit){
JsonObject obj = jsonDocument.createNestedObject();
obj["type"] = tag;
obj["value"] = value;
obj["unit"] = unit;
}
void read_sensor_data(void * parameter) {
for (;;) {
temperature = dht.readTemperature();
humidity = dht.readHumidity();
}
delay(2000);
}
void getTemperature(){
create_json("temperature", temperature,"°C");
server.send(200, "application/json", buffer);
Serial.println(temperature);
}
void getHumidity(){
create_json("humidty", humidity, "%");
server.send(200, "application/json", buffer);
Serial.println(humidity);
}
void getEnv() {
jsonDocument.clear();
add_json_object("temperature", temperature, "°C");
add_json_object("humidity", humidity, "%");
serializeJson(jsonDocument, buffer);
server.send(200, "application/json", buffer);
}
void setup() {
dht.begin();
Serial.begin(115200);
Serial.println(WiFi.localIP());
connectToWiFi();
setup_routing();
}
void loop() {
// put your main code here, to run repeatedly:
delay(2000);
float temperature = dht.readTemperature();
float humidty = dht.readHumidity();
}
您发布的 loop()
代码如下所示:
void loop() {
// put your main code here, to run repeatedly:
delay(2000);
float temperature = dht.readTemperature();
float humidty = dht.readHumidity();
}
您没有包含允许 Web 服务器 运行 所必需的代码。 Web 服务器需要在 loop()
期间获得 运行 的机会,否则它无法为请求提供服务。
您的 loop()
需要包括 server.handleClient()
。
您可以看到这个 in basic examples 展示了如何使用 WebServer
。
添加该代码后,您需要重写 loop()
不总是延迟两秒,否则您将延迟 Web 服务器和传感器读取。
当我将此代码加载到我的 Arduino 时,他连接到 WiFi 并出现在我的 IP 扫描仪上。但是当我在 FireFox 中打开设备的 IP 时,没有任何加载。 (http://10.0.0.40/env) 我的代码是否有问题,或者它不是这样工作的。我有一个读取温度和湿度的传感器。这两个值应该在我的网络中可用于 fetch()。使用 Javascript 我想在我的本地 html 页面上显示这些。网络凭据刚刚被审查。
#include <ArduinoJson.h>
#include <WiFi.h>
#include <WebServer.h>
#include <DHT.h>
#define DHTPIN 13
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
const char *ssid = "XXX";
const char *pwd = "XXX";
StaticJsonDocument<250> jsonDocument;
char buffer[250];
float temperature;
float humidity;
WebServer server(80);
void connectToWiFi() {
Serial.print("Connect to: ");
Serial.println(ssid);
WiFi.begin(ssid, pwd);
while (WiFi.status() !=WL_CONNECTED){
Serial.print(".");
delay(1000);
}
Serial.print("Connected. IP: ");
Serial.println(WiFi.localIP());
}
void setup_routing(){
server.on("/temperature", getTemperature);
server.on("/humidity", getHumidity);
server.on("/env", getEnv);
server.begin();
}
void create_json(char *tag, float value, char *unit){
jsonDocument.clear();
jsonDocument["type"] = tag;
jsonDocument["value"] = value;
jsonDocument["unit"] = unit;
serializeJson(jsonDocument, buffer);
}
void add_json_object(char *tag, float value, char *unit){
JsonObject obj = jsonDocument.createNestedObject();
obj["type"] = tag;
obj["value"] = value;
obj["unit"] = unit;
}
void read_sensor_data(void * parameter) {
for (;;) {
temperature = dht.readTemperature();
humidity = dht.readHumidity();
}
delay(2000);
}
void getTemperature(){
create_json("temperature", temperature,"°C");
server.send(200, "application/json", buffer);
Serial.println(temperature);
}
void getHumidity(){
create_json("humidty", humidity, "%");
server.send(200, "application/json", buffer);
Serial.println(humidity);
}
void getEnv() {
jsonDocument.clear();
add_json_object("temperature", temperature, "°C");
add_json_object("humidity", humidity, "%");
serializeJson(jsonDocument, buffer);
server.send(200, "application/json", buffer);
}
void setup() {
dht.begin();
Serial.begin(115200);
Serial.println(WiFi.localIP());
connectToWiFi();
setup_routing();
}
void loop() {
// put your main code here, to run repeatedly:
delay(2000);
float temperature = dht.readTemperature();
float humidty = dht.readHumidity();
}
您发布的 loop()
代码如下所示:
void loop() {
// put your main code here, to run repeatedly:
delay(2000);
float temperature = dht.readTemperature();
float humidty = dht.readHumidity();
}
您没有包含允许 Web 服务器 运行 所必需的代码。 Web 服务器需要在 loop()
期间获得 运行 的机会,否则它无法为请求提供服务。
您的 loop()
需要包括 server.handleClient()
。
您可以看到这个 in basic examples 展示了如何使用 WebServer
。
添加该代码后,您需要重写 loop()
不总是延迟两秒,否则您将延迟 Web 服务器和传感器读取。