ESP8266实例
本文最后更新于291 天前,其中的信息可能已经过时,如有错误请发送邮件到2067965693@qq.com

arduino库指令集

https://docs.arduino.cc/programming

HTTP通讯

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ArduinoJson.h>
#include "index.h"
#define AP_ssid   "TaichiMaker_WIFI" //这里改成你的设备当前环境下接入点名字
#define password  "12345678"         //这里改成你的设备当前环境下接入点密码

#define wifi_name1 "socket"
#define wifi_password1 "f71796316"

#define pinA D0
#define pinB D1


bool status = false;

ESP8266WebServer Server(80);//启动80端口,实例化ESP8266WebServer

//传递函数
void homepage() {
  // 通过FPSTR闪存文件发送"text/html"类型的数据到网页
  Server.send(200,"text/html",FPSTR(indexHtml));
  Serial.print("网站接入成功");

}

void contral(){
  String jsonData ="";
  Server.sendHeader("Access-Control-Allow-Origin", "*");
  String jsonStr = Server.arg("plain");  // 获取原始 JSON 字符串
  StaticJsonDocument<200> doc;
  deserializeJson(doc, jsonStr);
  
  String cod = doc["cod"];      // 提取字段
  String text = doc["text"];
  
  if(text=="up"){
    jsonData = "{\"status\":\"ok\"}";
    status = 0;

  }
  else{
    jsonData = "{\"status\":\"no\"}";
    status = 1;
  }
  Server.send(200, "application/json", jsonData); 
}


//按键控制灯



void Button(){
  if(digitalRead(pinB)==0){
    delay(20);
    while(digitalRead(pinB)==0);
    delay(20);
    status = !status;
  }
}

void setup() {
  // 启动串口通讯
  Serial.begin(9600); 
  pinMode(pinA,OUTPUT);
  pinMode(pinB,INPUT_PULLUP);
  digitalWrite(pinA,LOW);
  Serial.println();
  //配置接入点信息
  WiFi.mode(WIFI_AP_STA);
  //启动接入点模式,并设置账号和密码
  Serial.print("设置接入点中 ... ");
  //启动校验式网络(需要输入账号密码的网络),通道为3,wifi隐藏,最大连接数=4
  WiFi.softAP(AP_ssid, password,3);

  Serial.println("");              // 通过串口监视器输出信息
  Serial.print("当前工作模式:");     // 告知用户设备当前工作模式
  Serial.println(WiFi.getMode());
  Serial.print("接入点名字:");    
  Serial.println(AP_ssid);         // 告知用户建立的接入点WiFi名
  Serial.print("接入点密码:");        
  Serial.println(password);        // 告知用户建立的接入点WiFi密码

  Serial.println("AP创建完成正在连接wifi");
  WiFi.begin(wifi_name1,wifi_password1);
  while(WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }
  Serial.print(" ");
  Serial.print("wifi接入成功");
  Serial.print(WiFi.localIP());

//每当有客户端向服务器发送HTTP请求时,我们可以利用on函数来设置HTTP请求回调函数。
  Server.on("/",homepage);
  Server.on("/submit",HTTP_POST,contral);
  Server.begin();
  Serial.println("");
}


void loop() {
  Button();
  Server.handleClient();
  digitalWrite(pinA,status);
}

MQTT通讯

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <regex>
#include <exception>
#include <String>
//  wifi名、密码
const char* WifiName = "ESP8266";
const char* WifiPassword = "12345678";

// MQTT
const char* MqttServer = "175.24.227.142";
unsigned int MqttPort = 1883;

//AP  Wifi
const char* GetWifiName = "socket";
const char* GetWifiPassword = "f71796316";

// 全局定义动态数组和长度记录
char* mqttPayload = nullptr;      // 字节数组指针要修改动态数组只能写nullptr
unsigned int payloadLength = 0;   // 存储实际数据长度
uint16_t flag = 0; //回调函数标志位
int rgbValues[3] = {0, 0, 0}; // 初始化为 {R, G, B}

const int pwmPinR = D0;  // GPIO14
const int pwmPinG = D1;  // GPIO14
const int pwmPinB = D2;  // GPIO14
int pwmValue = 0;


WiFiClient espClient;
PubSubClient client(espClient);

//提取数字
void GetNumber(void){
  uint32_t i=0;
  std::string text = mqttPayload;
  std::regex pattern("\\d+");
  std::smatch matches;
  //regex_search执行一遍会用正则找到一个数直达找不到为止,找到的数会存入matches中
  while(std::regex_search(text,matches,pattern)){
    Serial.println();
    rgbValues[i] =std::stoi(matches[0].str().c_str());
    //suffix()会获取匹配后剩余部分再次进入循环
    text = matches.suffix().str();
    i++;
  }
  Serial.print(rgbValues[0]);
  Serial.print("-");
  Serial.print(rgbValues[1]);
  Serial.print("-");
  Serial.print(rgbValues[2]);
}


//通过MQtt实现RGB
void RGBInit(void){
  GetNumber();
  analogWrite(pwmPinR, 255-rgbValues[0]);
  analogWrite(pwmPinG, 255-rgbValues[1]);
  analogWrite(pwmPinB, 255-rgbValues[2]);
}

//回调函数
void callback(char* topic, byte* payload, unsigned int length) {
    // 释放旧内存(避免内存泄漏)
  delete[] mqttPayload;
    // 动态分配新内存
  mqttPayload = new char[length];  // 创建精确长度的数组[6,8](@ref)

  for (unsigned int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
    mqttPayload[i] = payload[i];
  }
  payloadLength = length;
  Serial.println();
  //置标志位提醒收到数据进入GetNumber函数
  flag = 1;
}


//MQTT初始化
void MQTTInit(){
  client.setServer(MqttServer, MqttPort);
  client.setCallback(callback);
}

//WIFI初始化
void WifiInit(){
  WiFi.mode(WIFI_AP_STA);
  WiFi.softAP(WifiName,WifiPassword,3);
  Serial.println(" ");
  Serial.println("Wifi名字: "+String(WifiName));
  Serial.println("Wifi名字: "+String(WifiPassword));

  WiFi.begin(GetWifiName,GetWifiPassword);
  while(WiFi.status()!=WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }
  Serial.println(" ");
  Serial.println("连接成功");
  Serial.println(WiFi.localIP());
}

void reconnect(){
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Create a random client ID
    String clientId = "ESP8266Client-";
    clientId += String(random(0xffff), HEX);
    // Attempt to connect
    if (client.connect(clientId.c_str())) {
      Serial.println("connected");
      // Once connected, publish an announcement...
      client.publish("outTopic", "hello world");
      // ... and resubscribe
      client.subscribe("inTopic");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}



void setup() {
  Serial.begin(115200);
  pinMode(pwmPinR,OUTPUT);
  pinMode(pwmPinG, OUTPUT);
  pinMode(pwmPinB, OUTPUT);

  WifiInit();
  MQTTInit();
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
  if(flag==1){
      RGBInit();
      flag = 0;
  }

}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇