sever-client

该博客介绍了一个使用ESP32通过WiFi连接获取温度、海拔和气压数据的项目。设备首先连接到指定的WiFi网络,然后从本地服务器获取传感器读数,这些数据由一个运行在ESP32上的AsyncWebServer提供。读取的数据包括温度、海拔和气压,并显示在SSD1306 OLED屏幕上。此外,博客还展示了如何初始化和配置ESP32、WiFi连接、传感器以及HTTP请求的相关代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <WiFi.h>
#include <HTTPClient.h>

const char* ssid = “Maker.pro”;
const char* password = “87654321”;

//Your IP address or domain name with URL path
const char* serverNameTemp = “http://192.168.4.1/temperature”;
const char* serverNameAlti = “http://192.168.4.1/altitude”;
const char* serverNamePres = “http://192.168.4.1/pressure”;

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

String temperature;
String altitude;
String pressure;

unsigned long previousMillis = 0;
const long interval = 5000;

void setup() {
Serial.begin(115200);

// Address 0x3C for 128x64, you might need to change this value (use an I2C scanner)
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F(“SSD1306 allocation failed”));
for(;😉; // Don’t proceed, loop forever
}
display.clearDisplay();
display.setTextColor(WHITE);

WiFi.begin(ssid, password);
Serial.println(“Connecting”);
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
}

void loop() {
unsigned long currentMillis = millis();

if(currentMillis - previousMillis >= interval) {
// Check WiFi connection status
if(WiFi.status()== WL_CONNECTED ){
temperature = httpGETRequest(serverNameTemp);
altitude = httpGETRequest(serverNameAlti);
pressure = httpGETRequest(serverNamePres);
Serial.println(“Temperature: " + temperature + " *C - Altitude: " + altitude + " m - Pressure: " + pressure + " hPa”);

  display.clearDisplay();
  
  // display temperature
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.print("T: ");
  display.print(temperature);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(248);
  display.setTextSize(2);
  display.print("C");
  
  // display altitude
  display.setTextSize(2);
  display.setCursor(0, 25);
  display.print("A: ");
  display.print(altitude);
  display.setTextSize(1);
  display.setCursor(110, 30);
  display.print(" m"); 
  
  // display pressure
  display.setTextSize(2);
  display.setCursor(0, 50);
  display.print("P:");
  display.print(pressure);
  display.setTextSize(1);
  display.setCursor(110, 56);
  display.print("hPa");
       
  display.display();
  
  // save the last HTTP GET Request
  previousMillis = currentMillis;
}
else {
  Serial.println("WiFi Disconnected");
}

}
}

String httpGETRequest(const char* serverName) {
HTTPClient http;

// Your IP address with path or Domain name with URL path
http.begin(serverName);

// Send HTTP POST request
int httpResponseCode = http.GET();

String payload = “–”;

if (httpResponseCode>0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
payload = http.getString();
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
// Free resources
http.end();

return payload;
}

//
// Import required libraries
#include “WiFi.h”
#include “ESPAsyncWebServer.h”

#include <Wire.h>
#include <Adafruit_Sensor.h>
//#include <Adafruit_BME280.h>
#include <Adafruit_BMP085.h>
// Set your access point network credentials
const char* ssid = “Maker.pro”;
const char* password = “87654321”;

Adafruit_BMP085 bmp;

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

String readTemp() {
return String(bmp.readTemperature());
//return String(1.8 * bme.readTemperature() + 32);
}

String readAlti() {
return String(bmp.readAltitude());
}

String readPres() {
return String(bmp.readPressure() / 100.0F);
}

void setup(){
// Serial port for debugging purposes
Serial.begin(115200);
Serial.println();

// Setting the ESP as an access point
Serial.print(“Setting AP (Access Point)…”);
// 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());
});
server.on("/altitude", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, “text/plain”, readAlti().c_str());
});
server.on("/pressure", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, “text/plain”, readPres().c_str());
});

bool status;

status = bmp.begin();
if (!status) {
Serial.println(“Could not find a valid BMp180 sensor, check wiring!”);
while (1);
}

// Start server
server.begin();
}

void loop(){

}

WLAN是英文WirelessLAN的缩写,就是无线局域网的意思。无线以太网技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活、建网迅速、个人化等特点。将这一技术应用于电信网的接入网领域,能够方便、灵活地为用户提供网络接入,适合于用户流动性较大、有数据业务需求的公共场所、高端的企业及家庭用户、需要临时建网的场合以及难以采用有线接入方式的环境等 作为全球公认的局域网权威,IEEE802工作组建立的标准在过去二十年内在局域网领域独领风骚。这些协议包括了802.3Ethernet协议、802.5TokenRing协议、802.3z100BASE-T快速以太网协议。在1997年,经过了7年的工作以后,IEEE发布了802.11协议,这也是在无线局域网领域内的第一个国际上被认可的协议。  在1999年9月,他们又提出了802.11b"HighRate"协议,用来对802.11协议进行补充,802.11b在802.11的1Mbps和2Mbps速率下又增加了5.5Mbps和11Mbps两个新的网络吞吐速率。利用802.11b,移动用户能够获得同Ethernet一样的性能、网络吞吐率、可用性。这个基于标准的技术使得管理员可以根据环境选择合适的局域网技术来构造自己的网络,满足他们的商业用户和其他用户的需求。802.11协议主要工作在ISO协议的最低两层上,并在物理层上进行了一些改动,加入了高速数字传输的特性和连接的稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值