ESP8266联网

目录

1.ESP8266连接热点

2.ESP8266创建热点

创建热点的ESP8266

连接热点的ESP8266

3.发送网络请求

案例一

案例二

4.连接服务器

接收信息开关灯

发布消息开关灯

5.ESP8266创建HTTP服务

​编辑

​编辑

​编辑

6.ESP8266HTTP请求控制灯

​编辑

7.ESP8266接收后端数据


1.ESP8266连接热点

基于WiFi-client示例

/*
    This sketch establishes a TCP connection to a "quote of the day" service.
    It sends a "hello" message, and then prints received data.
*/

#include <ESP8266WiFi.h>

#ifndef STASSID
#define STASSID "hello"
#define STAPSK  "12345679"
#endif

const char* ssid     = STASSID;
const char* password = STAPSK;

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

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("连接 to ");
  Serial.println(ssid);

  /* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default,
     would try to act as both a client and an access-point and could cause
     network-issues with your other WiFi-devices on your WiFi-network. */
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("wifi连接成功");
  Serial.println("IP 地址: ");
  Serial.println(WiFi.localIP());
}

void loop()
{}

2.ESP8266创建热点

创建热点的ESP8266

基于WiFi-AccessPoint示例



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

#ifndef APSSID
//热点名
#define APSSID "ESP8266_AP"
//热点密码
#define APPSK  "123456"
#endif

/* Set these to your desired credentials. */
const char *ssid = "ESP8266_AP";
const char *password = APPSK;
 int number=0;
void setup() {
  delay(1000);
  Serial.begin(9600);
  Serial.println();
  Serial.print("创建热点...");
  Serial.print(ssid);
  /* You can remove the password parameter if you want the AP to be open. */
  //创建热点
  WiFi.softAP(ssid, password);   

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


}

void loop() {
  number=WiFi.softAPgetStationNum();
  if(number)
  {
  Serial.print("设备连接数:");
  Serial.print(number);
  }
}

2.

#include <ESP8266WiFi.h>

// 热点名称和密码
const char *ap_ssid = "ESP8266_AP";
const char *ap_password = "12345678";

void setup() {
  Serial.begin(9600);
  
  // 等待串口初始化完成
  delay(1000);
  
  // 打印启动信息
  Serial.println("Starting AP...");
  
  // 创建热点
  WiFi.softAP(ap_ssid, ap_password);
  
  // 获取热点的IP地址
  IPAddress ip = WiFi.softAPIP();
  
  // 打印热点的IP地址
  Serial.print("AP IP address: ");
  Serial.println(ip);
}

void loop() {
  // 获取连接到热点的设备数量
  int numberOfClients = WiFi.softAPgetStationNum();
  
  // 如果有设备连接,打印设备数量
  if (numberOfClients) {
    Serial.print("Number of connected devices: ");
    Serial.println(numberOfClients);
  }
  
  // 适当延时,避免频繁打印
  delay(5000);
}

连接热点的ESP8266


#include <ESP8266WiFi.h>

#ifndef STASSID
#define STASSID "ESP8266_AP"
#define STAPSK  "12345678"
#endif

const char* ssid     = STASSID;
const char* password = STAPSK;

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

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("连接 to ");
  Serial.println(ssid);

  /* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default,
     would try to act as both a client and an access-point and could cause
     network-issues with your other WiFi-devices on your WiFi-network. */
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("wifi连接成功");
  Serial.println("IP 地址: ");
  Serial.println(WiFi.localIP());
}

void loop()
{}

3.发送网络请求

案例一

https://www.juhe.cn/

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

#ifndef STASSID
#define STASSID "hello"
#define STAPSK  "12345679"
#endif

const char* ssid     = STASSID;
const char* password = STAPSK;

String url = "http://apis.juhe.cn/simpleWeather/query";
String city = "上海";
String key = "dbbdc4f89228d7281fbbbde5ccddf395";

void setup() {
  Serial.begin(9600);
  
  Serial.println();
  Serial.println();
  Serial.print("正在连接到 ");
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi已连接");
  Serial.print("IP地址: ");
  Serial.println(WiFi.localIP());

  HTTPClient http;

  // 构造完整的URL和参数
  String requestUrl = url + "?city=" + city + "&key=" + key;

  http.begin(requestUrl);
  int http_code = http.GET();
  Serial.printf("HTTP状态码: %d\n", http_code);

  String response = http.getString();
  Serial.print("响应数据:");
  Serial.println(response);

  http.end();

  DynamicJsonDocument doc(1024);
  DeserializationError error = deserializeJson(doc, response);
  if (error) {
    Serial.print("deserializeJson() 失败: ");
    Serial.println(error.c_str());
    return;
  }

  unsigned int temp = doc["result"]["realtime"]["temperature"].as<unsigned int>();
  String info = doc["result"]["realtime"]["info"].as<String>();
  int aqi = doc["result"]["realtime"]["aqi"].as<int>();  

  Serial.printf("温度: %u, 天气: %s, 空气质量指数: %d\n", temp, info.c_str(), aqi);
}

void loop() {
  // 空循环
}

案例二

http://www.tianqiapi.com/

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

const char* ssid     = "hello";
const char* password = "12345679";

String url = "http://v1.yiketianqi.com/free/day";
String appid = "看个人";
String appsecret = "看个人";
int unescape = 1;

void setup() {
  Serial.begin(9600);
  Serial.println();
  Serial.println("Connecting to WiFi");
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  HTTPClient http;
  String requestUrl = url + "?appid=" + appid + "&appsecret=" + appsecret + "&unescape=" + String(unescape)+"&city="+"金华";

  http.begin(requestUrl);

  int http_code = http.GET();
  if (http_code != HTTP_CODE_OK) {
    Serial.printf("HTTP GET failed, error code: %d\n", http_code);
    http.end();
    return;
  }

  String response = http.getString();
  http.end();

  DynamicJsonDocument doc(1024);
  DeserializationError error = deserializeJson(doc, response);

  if (error) {
    Serial.print("deserializeJson() failed: ");
    Serial.println(error.c_str());
    return;
  }

  const char* city = doc["city"];
  const char* date = doc["date"];
  const char* wea = doc["wea"];

  Serial.printf("City: %s, Date: %s, Weather: %s\n", city, date, wea);
}

void loop() {
  // Empty loop
}

4.连接服务器

在浏览器输入你的ip:18083

初始的用户名    admin

密码      public

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char* ssid = "ming‘s iPhone";
const char* password = "123321123";
const char* mqtt_server = "ip";
const int mqtt_port = 1883;  //一般是1883
const char* mqtt_client_id = "esp8266-client";
const char* mqtt_user = "esp8266-client"; // 替换为你的MQTT服务器用户名
const char* mqtt_password = "123456"; // 替换为你的MQTT服务器密码

WiFiClient espClient;
PubSubClient client(espClient);

void callback(char* topic, byte* payload, unsigned int length);

void setup() {
  Serial.begin(9600);
  Serial.println("Connecting to WiFi");

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  client.setServer(mqtt_server, mqtt_port);
  client.setCallback(callback);

  // Attempt to connect with username and password
  if (!client.connect(mqtt_client_id, mqtt_user, mqtt_password)) {
    Serial.println("Failed to connect to MQTT server");
    return;
  }

  Serial.println("Connected to MQTT server");
  client.subscribe("led");  // Subscribe to "led" topic
}

void loop() {
  client.loop();  // Maintain MQTT connection
  // Other loop code here
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");

  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
}

接收信息开关灯

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const int ledPin = D8; // LED连接到的GPIO引脚

const char* ssid = "ming‘s iPhone";
const char* password = "123321123";
const char* mqtt_server = "ip";
const int mqtt_port = 1883;
const char* mqtt_client_id = "esp8266-client";
const char* mqtt_user = "esp8266-client"; 
const char* mqtt_password = "123456"; 

WiFiClient espClient;
PubSubClient client(espClient);

void callback(char* topic, byte* payload, unsigned int length);

void setup() {
  Serial.begin(9600);
  Serial.println("Connecting to WiFi");

  // 设置D8引脚为输出模式
  pinMode(ledPin, OUTPUT);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  client.setServer(mqtt_server, mqtt_port);
  client.setCallback(callback);

  if (!client.connect(mqtt_client_id, mqtt_user, mqtt_password)) {
    Serial.println("Failed to connect to MQTT server");
    return;
  }

  Serial.println("Connected to MQTT server");
  client.subscribe("led");
}

void loop() {
  client.loop();
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");

  char message[length + 1];
  for (int i = 0; i < length; i++) {
    message[i] = (char)payload[i];
  }
  message[length] = '\0';

  Serial.println(message);

  // 检查消息内容,如果为"1"则打开LED灯
  if (strcmp(message, "1") == 0) {
    digitalWrite(ledPin, HIGH);
  } else {
    // 如果消息不是"1",可以保持LED状态不变或关闭
    digitalWrite(ledPin, LOW);
  }
}

如果连接不上,就试一下下面的代码

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const int ledPin = D8; // LED连接到的GPIO引脚

const char* ssid = "hello";
const char* password = "12345679";
const char* mqtt_server_ip = "ip"; // 直接使用 IP 地址
const int mqtt_port = 1883;
const char* mqtt_client_id = "pc";
const char* mqtt_user = "pc"; 
const char* mqtt_password = "12345"; 

WiFiClient espClient;
PubSubClient client(espClient);

void callback(char* topic, byte* payload, unsigned int length);

void setup() {
  Serial.begin(9600);
  Serial.println("Connecting to WiFi");

  // 设置D8引脚为输出模式
  pinMode(ledPin, OUTPUT);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  client.setServer(mqtt_server_ip, mqtt_port); // 使用 IP 地址代替域名
  client.setCallback(callback);

  // 尝试连接到 MQTT 服务器
  while (!client.connect(mqtt_client_id, mqtt_user, mqtt_password)) {
    Serial.println("Failed to connect to MQTT server, retrying...");
    delay(5000); // 重试连接前等待5秒
  }

  Serial.println("Connected to MQTT server");
  client.subscribe("led");
}

void loop() {
  if (!client.connected()) {
    Serial.println("Reconnecting to MQTT server...");
    while (!client.connect(mqtt_client_id, mqtt_user, mqtt_password)) {
      delay(5000); // 重试连接前等待5秒
    }
    Serial.println("Connected to MQTT server");
    client.subscribe("led");
  }

  client.loop();
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");

  char message[length + 1];
  for (int i = 0; i < length; i++) {
    message[i] = (char)payload[i];
  }
  message[length] = '\0';

  Serial.println(message);

  // 检查消息内容,如果为"1"则打开LED灯
  if (strcmp(message, "1") == 0) {
    digitalWrite(ledPin, HIGH);
  } else {
    // 如果消息不是"1",可以保持LED状态不变或关闭
    digitalWrite(ledPin, LOW);
  }
}

在WebSocket客户端发布主题

发布消息开关灯

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const int ledPin = D8; // LED连接到的GPIO引脚
const int buttonPin = D7; // 按键连接到的GPIO引脚

const char* ssid = "dbabeb";
const char* password = "12345678";
const char* mqtt_server = "ip";
const int mqtt_port = 1883;
const char* mqtt_client_id = "esp8266-publisher";
const char* mqtt_user = "esp8266-publisher"; 
const char* mqtt_password = "123456"; 
bool ledState = false; // 跟踪 LED 状态
bool previousButtonState = HIGH; // 上次按键的状态

WiFiClient espClient;
PubSubClient client(espClient);

void callback(char* topic, byte* payload, unsigned int length);

void setup() {
  Serial.begin(9600);
  Serial.println("Connecting to WiFi");

  // 设置D8引脚为输出模式
  pinMode(ledPin, OUTPUT);
  // 设置D7引脚为输入模式,启用内部上拉电阻
  pinMode(buttonPin, INPUT_PULLUP);
  
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  client.setServer(mqtt_server, mqtt_port);
  client.setCallback(callback);

  if (!client.connect(mqtt_client_id, mqtt_user, mqtt_password)) {
    Serial.println("Failed to connect to MQTT server");
    return;
  }

  Serial.println("Connected to MQTT server");
  client.subscribe("led");
}

void loop() {
  client.loop();

  bool currentButtonState = digitalRead(buttonPin); // 当前按键状态

  // 检测按键状态变化
  if(currentButtonState == LOW && previousButtonState == HIGH) {
    // 如果按键被按下
    ledState = !ledState; // 切换 LED 状态

    // 发送 MQTT 消息来控制 LED 灯
    char state[2];
    state[0] = ledState ? '1' : '0';
    state[1] = '\0';
    client.publish("led", state);

    delay(100); // 防止重复触发
  }

  previousButtonState = currentButtonState; // 更新上次按键的状态
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");

  char message[length + 1];
  for (int i = 0; i < length; i++) {
    message[i] = (char)payload[i];
  }
  message[length] = '\0';

  Serial.println(message);


}

5.ESP8266创建HTTP服务

#include <ESP8266WiFi.h>
#include <ESPAsyncWebServer.h>

#ifndef STASSID
#define STASSID "dbabeb"
#define STAPSK  "12345678"
#endif

const char* ssid     = STASSID;
const char* password = STAPSK;

AsyncWebServer server(80); // 使用 AsyncWebServer 类

void handleRoot(AsyncWebServerRequest *request)
{
  String html = "<!DOCTYPE html><html><head><meta charset='utf-8'></head><body>"
                "你好呀好呀好呀"
                "</body></html>";
  request->send(200, "text/html", html);
}

void handleHello(AsyncWebServerRequest *request)
{
  request->send(200, "text/html", "hello");
}

void handleNotFound(AsyncWebServerRequest *request)
{
  request->send(404, "text/html;charset=utf-8", "没有找到页面!");
}

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

  // 连接到WiFi网络
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi连接成功");
  Serial.println("IP地址: ");
  Serial.println(WiFi.localIP());

  // 设置路由处理函数
  server.on("/", handleRoot);
  server.on("/hello", HTTP_GET, handleHello);
  server.onNotFound(handleNotFound);

  // 启动Web服务器
  server.begin();
}

void loop() {
  // 主循环可以留空,除非有其他任务需要处理
}

6.ESP8266HTTP请求控制灯

#include <ESP8266WiFi.h>
#include <ESPAsyncWebServer.h>

#ifndef STASSID
#define STASSID "dbabeb"
#define STAPSK  "12345678"
#endif

const char* ssid     = STASSID;
const char* password = STAPSK;

const int ledPin = D8; // LED连接到的GPIO引脚
AsyncWebServer server(80); // 使用 AsyncWebServer 类

void handleRoot(AsyncWebServerRequest *request)
{
  String html = "<!DOCTYPE html><html><head><meta charset='utf-8'></head><body>"
                "你好呀好呀好呀"
                "</body></html>";
  request->send(200, "text/html", html);
}

void handleHello(AsyncWebServerRequest *request)
{
  request->send(200, "text/html", "hello");
}

void handleNotFound(AsyncWebServerRequest *request)
{
  request->send(404, "text/html;charset=utf-8", "没有找到页面!");
}

void handleLed(AsyncWebServerRequest *request)
{
  String state = request->arg("led");
  if (state == "off") {
    digitalWrite(ledPin, LOW);
  }
  else if (state == "on") {
    digitalWrite(ledPin, HIGH);
  }
  request->send(200, "text/html", "LED is <b>" + state + "</b>");
}

void setup() {
  Serial.begin(9600);
  // 设置D8引脚为输出模式
  pinMode(ledPin, OUTPUT);
  // 连接到WiFi网络
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi连接成功");
  Serial.println("IP地址: ");
  Serial.println(WiFi.localIP());

  // 设置路由处理函数
  server.on("/", handleRoot);
  server.on("/hello", HTTP_GET, handleHello);
  server.on("/ledctr", HTTP_GET, handleLed);
  server.onNotFound(handleNotFound);

  // 启动Web服务器
  server.begin();
}

void loop() {
  // 主循环可以留空,除非有其他任务需要处理
}

7.ESP8266网页按钮控制灯

#include <ESP8266WiFi.h>
#include <ESPAsyncWebServer.h>

#ifndef STASSID
#define STASSID "dbabeb"
#define STAPSK  "12345678"
#endif

const char* ssid     = STASSID;
const char* password = STAPSK;

const int ledPin = D8; // LED连接到的GPIO引脚
AsyncWebServer server(80); // 使用 AsyncWebServer 类

void handleRoot(AsyncWebServerRequest *request)
{
  String html = "<!DOCTYPE html><html><head><meta charset='utf-8'></head><body>"
                "你好呀好呀好呀"
                "<script>"
                "var xhttp = new XMLHttpRequest();"
                "function ledctr(arg) {"
                "  xhttp.open('GET', '/ledctr?led=' + arg, true);"
                "  xhttp.send();"
                "}"
                "</script>"
                "<button onclick='ledctr(\"on\")'>开灯</button>"
                "<button onclick='ledctr(\"off\")'>关灯</button>"
                "</body></html>";

  request->send(200, "text/html", html);
}

void handleHello(AsyncWebServerRequest *request)
{
  request->send(200, "text/html", "hello");
}

void handleNotFound(AsyncWebServerRequest *request)
{
  request->send(404, "text/html;charset=utf-8", "没有找到页面!");
}

void handleLed(AsyncWebServerRequest *request)
{
  String state = request->arg("led");
  if (state == "off") {
    digitalWrite(ledPin, LOW);
  }
  else if (state == "on") {
    digitalWrite(ledPin, HIGH);
  }
  request->send(200, "text/html", "LED is <b>" + state + "</b>");
}

void setup() {
  Serial.begin(9600);
  // 设置D8引脚为输出模式
  pinMode(ledPin, OUTPUT);
  // 连接到WiFi网络
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi连接成功");
  Serial.println("IP地址: ");
  Serial.println(WiFi.localIP());

  // 设置路由处理函数
  server.on("/", handleRoot);
  server.on("/hello", HTTP_GET, handleHello);
  server.on("/ledctr", HTTP_GET, handleLed);
  server.onNotFound(handleNotFound);

  // 启动Web服务器
  server.begin();
}

void loop() {
  // 主循环可以留空,除非有其他任务需要处理
}

7.ESP8266接收后端数据

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>
 
#ifndef STASSID
#define STASSID "2022"
#define STAPSK  "WQ1371480"
#endif
 
const char* ssid     = STASSID;
const char* password = STAPSK;
 
String url = "http://192.168.43.33:9001/single";
String city = "123456";
String key = "999999";
 
void setup() {
  Serial.begin(9600);
  
  Serial.println();
  Serial.println();
  Serial.print("正在连接到 ");
  Serial.println(ssid);
 
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
 
  Serial.println("");
  Serial.println("WiFi已连接");
  Serial.print("IP地址: ");
  Serial.println(WiFi.localIP());
 
  HTTPClient http;
 
  // 构造完整的URL和参数
  String requestUrl = url + "?appid=" + city + "&appsecret=" + key;
 
  http.begin(requestUrl);
  int http_code = http.GET();
  Serial.printf("HTTP状态码: %d\n", http_code);
 
  String response = http.getString();
  Serial.print("响应数据:");
  Serial.println(response);
 
  http.end();
 
  DynamicJsonDocument doc(1024);
  DeserializationError error = deserializeJson(doc, response);
  if (error) {
    Serial.print("deserializeJson() 失败: " + response);
    Serial.println(error.c_str());
    return;
  }
 
// 正确的JSON字段类型转换和打印 
String cityId = doc["cityid"].as<String>(); 
String date = doc["date"].as<String>();
String week = doc["week"].as<String>(); 

Serial.printf("城市: %s\n时间: %s\n星期几: %s\n", cityId.c_str(), date.c_str(), week.c_str());
}
 
void loop() {
  // 空循环
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/905476.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

聊一聊Qt中的按钮

目录 QAbstractButton 功能概述 快捷键 默认按钮 按钮状态 自动重复功能 切换按钮 信号 子类化 API列表 QPushButton 按钮外观与功能 默认按钮 按钮的状态与模式 使用建议 菜单按钮 API QToolButton 创建工具按钮 用途示例 自动抬起功能 图标设置 外观与…

使用RabbitMQ实现微服务间的异步消息传递

使用RabbitMQ实现微服务间的异步消息传递 RabbitMQ简介 安装RabbitMQ 在Ubuntu上安装RabbitMQ 在CentOS上安装RabbitMQ 配置RabbitMQ 创建微服务 生产者服务 安装依赖 生产者代码 消费者服务 消费者代码 运行微服务 消息模式 直接模式 生产者代码 消费者代码 扇出模式 生产…

「实战应用」如何在 DHTMLX Scheduler 中实现动态主题切换?

创建响应式、直观的 UI 需要适应用户对应用程序各个方面的偏好。其中一项可显著提升用户体验的热门功能是能够在明暗主题之间切换。它在日程安排日历等综合组件中尤其有用。 本文将指导您在 DHTMLX Scheduler 中实现动态主题切换&#xff0c;使其适应用户设置的首选系统主题。…

Marin说PCB之电源的Surface Current Density知多少?

小编我是一位资深的国漫迷&#xff0c;像什么仙逆&#xff0c;斗破&#xff0c;斗罗&#xff0c;完美世界&#xff0c;遮天&#xff0c;凡人修仙传&#xff0c;少年歌行等&#xff0c;为了可以看这些视频小编我不惜花费了攒了很多年的私房钱去开了这个三个平台的会员啊&#xf…

【YApi】接口管理平台

一、简介 YApi 是一个用于前后端开发团队协作的 API 管理平台&#xff0c;帮助团队更加高效地进行 API 接口的设计、测试、文档管理和版本控制等工作。 YApi 主要功能&#xff1a; API 设计和管理&#xff1a;提供 API 设计和文档生成工具&#xff0c;使开发者能够轻松创建、…

【C/C++】字符/字符串函数(1)——由string.h提供

零.导言 什么是字符/字符串函数呢&#xff1f; 其实就是一类用于处理字符和字符串的函数。 而其中一部分函数包含在头文件 string.h 中&#xff0c;有 strlen strcpy strcat strcmp strncpy strncat strncmp strstr strtok strerror 等等 接下来我将逐个讲解这些函数。 一.str…

简单的kafkaredis学习之redis

简单的kafka&redis学习之redis 2. Redis 2.1 什么是Redis Redis是一种面向 “Key-Value” 数据类型的内存数据库&#xff0c;可以满足我们对海量数据的快速读写需求&#xff0c;Redis是一个 NoSQL 数据库&#xff0c;NoSQL的全称是not only sql&#xff0c;不仅仅是SQL&…

在 Visual Studio 中使用 Eigen 库

在 Visual Studio 中使用 Eigen 库 参考教程&#xff1a; 在 Visual Studio 中配置 Eigen库_vs调用eigen-CSDN博客 Eigen 是一个开源的 C 库&#xff0c;主要用来支持线性代数&#xff0c;矩阵和矢量运算&#xff0c;数值分析及其相关的算法。Eigen 除了需要 C 标准库以外&am…

认证鉴权框架之—sa-token

一、概述 Satoken 是一个 Java 实现的权限认证框架&#xff0c;它主要用于 Web 应用程序的权限控制。Satoken 提供了丰富的功能来简化权限管理的过程&#xff0c;使得开发者可以更加专注于业务逻辑的开发。 二、逻辑流程 1、登录认证 &#xff08;1&#xff09;、创建token …

MES(Manufacturing Execution System)制造执行系统解决方案 :高效协同, 实现数字化智能工厂

文章目录 引言I 常用功能模块车间实时数据设备维修证书管理II UI设计III 术语5M1Esee also引言 MES软件即制造企业生产过程执行管理软件,是一套面向制造企业车间执行层的生产信息化管理系统。 MES 可以为企业提供包括制造数据管理、计划排程管理、生产调度管理、库存管理、质…

Qt 实战(10)模型视图 | 10.5、代理

文章目录 一、代理1、简介2、自定义代理 前言&#xff1a; 在Qt的模型/视图&#xff08;Model/View&#xff09;框架中&#xff0c;代理&#xff08;Delegate&#xff09;是一个非常重要的概念。它充当了模型和视图之间的桥梁&#xff0c;负责数据的显示和编辑。代理可以自定义…

“北斗+实景三维”,助力全域社会治理

在国家治理体系和治理能力现代化的大背景下&#xff0c;全域社会治理成为提升国家治理效能的关键。“北斗实景三维”技术组合&#xff0c;为全域社会治理提供了新的技术支撑和解决方案。本文将探讨这一技术如何助力全域社会治理&#xff0c;以及其在实际应用中的潜力和挑战。 …

mysql8.0.32升级到8.0.40

上篇8.0.32库的准备&#xff1a;mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No suc-CSDN博客 此篇测试升级到8.0.40 MySQL :: Download MySQL Community Server rootjyc:~# mysql -u root -pabcd1234 mysql: [Warning]…

高阶数据结构--图(graph)

图&#xff08;graph&#xff09; 1.并查集1. 并查集原理2. 并查集实现3. 并查集应用 2.图的基本概念3. 图的存储结构3.1 邻接矩阵3.2 邻接矩阵的代码实现3.3 邻接表3.4 邻接表的代码实现 4. 图的遍历4.1 图的广度优先遍历4.2 广度优先遍历的代码 1.并查集 1. 并查集原理 在一…

go 聊天系统项目-1

1、登录界面 说明&#xff1a;这一节的内容采用 go mod 管理【GO111MODULE‘’】的模块&#xff0c;从第二节开始使用【GO111MODULE‘off’】GOPATH 管理模块。具体参见 go 包相关知识 1.1登录界面代码目录结构 代码所在目录/Users/zld/Go-project/day8/chatroom/ 1.2登录…

支持向量机背后的数学奥秘

一、基本概念与原理 1.1 支持向量机的定义 支持向量机是一种二分类模型&#xff0c;其核心思想是在样本空间中寻找一个超平面&#xff0c;将不同类别的样本分开。这个超平面被称为决策边界或分隔超平面。支持向量是距离决策边界最近的点&#xff0c;这些点决定了决策边界的位…

C语言指针和数组相关习题

目录 sizeof和一维int数组sizeof和一维char数组strlen()和一维char数组sizeof和字符串strlen()和字符串指针变量指向字符串字面常量易错点sizeof(a):sizeof是操作符 当心整型提升sizeof和二维数组复习一下相关知识点练习题 一个离谱的错误指针1指针2指针3指针4指针5指针6指针7指…

Centos安装ZooKeeper教程(单机版)

本章教程介绍,如何在Centos7中,安装ZooKeeper 3.9.3版本。 一、什么是ZooKeeper ? Apache ZooKeeper 是一个分布式协调服务,用于大型分布式系统中的管理和协调。它为分布式应用提供了一个高性能的通信框架,简化了开发人员在构建复杂分布式系统的任务。ZooKeeper 能够解决一…

出国工作——常用英语——网站注册

Please set your password for your new Qt Account. Password must be at least 8 characters in length. 请为您的新 Qt 账户设置密码。密码长度必须至少为 8 个字符。 Password Password strength: BadThis is similar to a commonly used password. TIP: Add another wor…

江协科技STM32学习- P25 UART串口协议

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…