我有一个问题,我不能从我创建的。json中获取(),因为访问控制允许起源错误。我发现我必须创建某种头文件,但是我不知道这样的命令与我使用的库是什么样子的,也不知道必须选择哪些参数。我希望你能帮助我对这段代码进行必要的补充。
#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 setup() {
dht.begin();
Serial.begin(9600);
Serial.println(WiFi.localIP());
Serial.print("Connect to: ");
Serial.println(ssid);
WiFi.begin(ssid, pwd);
while (WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(500);
}
Serial.print("Connected. IP: ");
Serial.println(WiFi.localIP());
setup_routing();
}
void setup_routing(){
server.on("/sensor", getEnv);
sendHeader()
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 getEnv() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
jsonDocument.clear();
add_json_object("temperature", temperature, "°C");
add_json_object("humidity", humidity, "%");
serializeJson(jsonDocument, buffer);
server.send(200, "application/json", buffer);
}
void loop() {
server.handleClient();
}
事实上,您不需要这样做。WebServer
本身有API自动发送CORS头。您所需要做的就是在设置中启用它。请看下面的例子:
void setup_routing(){
server.enableCORS(); //This is the magic
server.on("/sensor", getEnv);
server.begin();
}
如果这不起作用,请随意评论。我稍后会更新我的答案。