1

目标

我正在尝试在两个 Esp8266 模块之间发送温度数据。服务器从模拟引脚读取温度值,并应该通过也在 Esp 上运行的 wifi 接入点将这些数据托管在网站上(我不知道正确的术语)。客户端应该接收温度值并通过串行输出。

什么有效

我可以将手机连接到接入点并访问接入点 IP 上的数据。我还可以将客户端 Esp 连接到我的家庭 wifi 并输出来自不同网站的代码。

问题

但是当我尝试将它连接到 Esp wifi 时,wifi 登录/连接工作,但 http.GET 函数输出 -1 对应于错误消息“HTTPC_ERROR_CONNECTION_FAILED”。

当客户端连接到 Esp 的 wifi 时,我的手机会显示类似的错误消息。

我还遇到了使用 Wifi 时 esp 无法连续读取 A0 的问题,所以我不得不延迟构建。

服务器代码

// Import required libraries
#include "ESPAsyncWebServer.h"
#include "WiFi.h"
#include <math.h>
#include <ESP8266WiFi.h>

//Constants for temperature calculation
double T;
float V_0 = 5.02;
float R_1 = 99700.0;
float a = 283786.2;
float b = 0.06593;
float c = 49886.0;
float set = 30;
int sensorValue;
float voltage;


// Set your access point network credentials
const char* ssid = "ESP32-Access-Point";
const char* password = "123456789";

// Create AsyncWebServer object on port 80
AsyncWebServer server(80);

String readTemp() {
  return String((-1.0/b)*(log(((R_1*voltage)/(a*(V_0-voltage)))-(c/a)))); //Function to calculate temperature from Voltage
}

void setup(){
  Serial.begin(115200);
  Serial.println();
  
  // Setting the ESP as an access point
  Serial.print("Setting AP (Access Point)…&quot;);
  // Remove the password parameter, if you want the AP (Access Point) to be open
  WiFi.softAP(ssid, password);

  IPAddress IP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(IP);

  server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/plain", readTemp().c_str());
  });
  
  // Start server
  server.begin();
}
 
void loop()
{
 //reading of A0
 Serial.println(voltage);          
 Serial.println(readTemp().c_str());
 sensorValue = analogRead(0); //?Wifi not working, when reading A0?
 delay(10);
 voltage = sensorValue * (3.3 / 1023.0);
}

客户代码

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>

#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti WiFiMulti;

const char* ssid = "ESP32-Access-Point";
const char* password = "123456789";

void setup () {
 
  Serial.begin(115200);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
 
    delay(1000);
    Serial.println("Connecting..");
 
  }
  Serial.print("Connected to ");
  Serial.println(ssid);
}

void loop() {
 
  if (WiFi.status() == WL_CONNECTED) { //Check WiFi connection status
 
    HTTPClient http;  //Declare an object of class HTTPClient
 
    http.begin("http://192.168.4.1/temperature");  //Specify request destination
    int httpCode = http.GET();                                  //Send the request
 
    if (httpCode > 0) { //Check the returning code
 
      String payload = http.getString();   //Get the request response payload
      Serial.println("/////////////////////////////////////////////////////////////");
      Serial.println(payload);             //Print the response payload
 
    }
    else{Serial.println("Error");}
    http.end();   //Close connection
 
  }
 
  delay(30000);    //Send a request every 30 seconds
}

如果有人能帮我解决这个问题,我将非常感激,因为我已经为此扯了几个星期的头发。在此先感谢,并为任何语法或拼写错误提前道歉。

4

0 回答 0