stm32
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | / * OLED 屏幕通常使用 I2C 接口,默认的 SCL 和 SDA 引脚分别为 PB6 和 PB7。 硬串口的引脚分配为: Serial1:PA9(TX),PA10(RX) Serial2:PA2(TX),PA3(RX) Serial3:PB10(TX),PB11(RX) * / #include <U8g2lib.h> #include <ArduinoJson.h> #define BEEPER_PIN PA11 // 假设蜂鸣器连接在引脚3 #ifdef U8X8_HAVE_HW_SPI #include <SPI.h> #endif #ifdef U8X8_HAVE_HW_I2C #include <Wire.h> #endif U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, / * clock = * / PB6, / * data = * / PB7, / * reset = * / U8X8_PIN_NONE); void setup() { / / 初始化串口 Serial.begin( 9600 ); / / 串口 1 用于调试 Serial2.begin( 9600 ); / / 硬串口 2 接收数据 Serial3.begin( 9600 ); / / 硬串口 3 发送数据 / / 初始化OLED显示 u8g2.begin(); / / 清屏并显示A0数据 u8g2.clearBuffer(); / / 清空显示缓冲区 u8g2.setFont(u8g2_font_ncenB08_tr); / / 设置字体 u8g2.drawStr( 0 , 10 , "Pressure: wait..." ); / / 在屏幕上打印文本 u8g2.drawStr( 0 , 20 , "ALARM: wait..." ); / / 显示更新 u8g2.sendBuffer(); / / 将数据发送到显示屏 / / 设置蜂鸣器引脚为输出 pinMode(BEEPER_PIN, OUTPUT); Serial.println(F( "开始运行" )); } int pressure = 0 ; void loop() { / / 检查硬串口 2 (Serial2) 是否有数据可供读取 if (Serial2.available() > 0 ) { / / 读取数据直到遇到换行符 String inputString = Serial2.readStringUntil( '\n' ); / / 使用 readStringUntil 读取直到换行符 if (inputString.length() > 0 ) { parseAndDisplayData(inputString); } } / / 清屏并显示A0数据 u8g2.clearBuffer(); / / 清空显示缓冲区 u8g2.setFont(u8g2_font_ncenB08_tr); / / 设置字体 u8g2.drawStr( 0 , 10 , "pressure: " ); / / 在屏幕上打印文本 u8g2.setCursor( 43 , 10 ); u8g2. print (pressure); / / 显示 A0 数据 / / 检查A0值是否超过 300 if (pressure > 240 ) { / / 超过 300 ,触发报警 u8g2.drawStr( 0 , 20 , "ALARM: 1" ); digitalWrite(BEEPER_PIN, HIGH); / / 启动蜂鸣器 } else { / / 未超过 300 ,正常显示 u8g2.drawStr( 0 , 20 , "ALARM: 0" ); digitalWrite(BEEPER_PIN, LOW); / / 关闭蜂鸣器 } / / 显示更新 u8g2.sendBuffer(); / / 将数据发送到显示屏 } void parseAndDisplayData(String data) { / / 创建一个用于解析的JSON文档 StaticJsonDocument< 200 > doc; / / 解析接收到的JSON数据 DeserializationError error = deserializeJson(doc, data); if (error) { / / JSON解析失败,打印错误 Serial. print (F( "解析失败: " )); Serial.println(error.c_str()); return ; } / / 获取A0数据 pressure = doc[ "A0" ]; String msg = "{\"pressure\":" + String(pressure) + "," + "\"alarm\":" + "\"关闭\"" + "}" ; Serial3.println(msg); Serial.println( "STM32--" + msg); / / 输出数据到硬串口 3 (Serial3) / / Serial3. print ( "{\"pressure\":" ); / / Serial3. print (A0_data); / / Serial3.println( "}" ); } |
esp发送
esp接受
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <FS.h> // 文件系统库 #include <ArduinoJson.h> #include <SoftwareSerial.h> // 软串口库 const char * ssid = "ESP8266_Hotspot" ; / / 热点名称 const char * password = "love123456" ; / / 热点密码 ESP8266WebServer server( 80 ); / / 创建 HTTP 服务器,监听端口 80 bool alarmState = false; / / 默认报警器关闭 float pressure = 100.0 ; / / 假设压力值为 1013 hPa #define BEEPER_PIN D4 // 假设蜂鸣器连接在引脚3 / / 创建软串口,使用 D1 和 D2 引脚 SoftwareSerial softSerial(D1, D2); / / D1 为 RX, D2 为 TX void setup() { Serial.begin( 9600 ); / / 启动串口调试 softSerial.begin( 9600 ); / / 启动软串口,波特率为 9600 / / 初始化文件系统 if (!SPIFFS.begin()) { Serial.println( "SPIFFS 初始化失败!" ); return ; } / / 设置为热点模式 WiFi.softAP(ssid, password); Serial.println( "Hotspot created" ); Serial. print ( "IP Address: " ); Serial.println(WiFi.softAPIP()); / / 打印热点 IP 地址 / / 设置蜂鸣器引脚为输出 pinMode(BEEPER_PIN, OUTPUT); digitalWrite(BEEPER_PIN, HIGH); / / 关闭蜂鸣器 / / 设置根目录的请求处理函数,返回 HTML 文件 server.on( "/" , HTTP_GET, handleRoot); server.on( "/data" , HTTP_GET, handleData); / / 用于动态数据访问 server.on( "/chart.js" , HTTP_GET, handleChartJS); / / 修改为 / chart.js 路由 server.on( "/control-alarm" , HTTP_GET, handleControlAlarm); / / 控制报警器 server.begin(); Serial.println( "esp3-交互网页模块开启 " ); } void loop() { server.handleClient(); / / 处理网页请求 / / 检查软串口是否有数据 if (softSerial.available()) { String jsonData = softSerial.readStringUntil( '\n' ); / / 读取一行数据 / / 解析 JSON 数据 StaticJsonDocument< 200 > doc; DeserializationError error = deserializeJson(doc, jsonData); if (!error) { / / 提取压力和报警状态 pressure = doc[ "pressure" ]; alarmState = doc[ "alarm" ]; Serial. print ( "esp3交互网页模块- 压力: " ); Serial.println(pressure); Serial. print ( "报警状态: " ); if (pressure> 240 ){ alarmState = "开启" ; digitalWrite(BEEPER_PIN, LOW); / / 启动蜂鸣器 } else { alarmState = "关闭" ; / / alarmState = "开启" ; digitalWrite(BEEPER_PIN, HIGH); / / 启动蜂鸣器 } Serial.println(alarmState ); } else { Serial.println( "JSON 解析失败!" ); } } } void handleRoot() { / / 从 SPIFFS 中读取 HTML 文件 File file = SPIFFS. open ( "/index.html" , "r" ); if (! file ) { server.send( 404 , "text/plain" , "File not found" ); return ; } server.streamFile( file , "text/html" ); / / 返回 HTML 文件 file .close(); } void handleChartJS() { / / 从 SPIFFS 中读取 Chart.js 文件 File file = SPIFFS. open ( "/chart.js" , "r" ); / / 这里读取 / chart.js 文件 if (! file ) { server.send( 404 , "text/plain" , "File not found" ); return ; } server.streamFile( file , "application/javascript" ); / / 返回 Chart.js 文件 file .close(); } void handleData() { / / 构造 JSON 响应 String jsonResponse = "{\"pressure\": " + String(pressure) + ", \"alarm\": " + (alarmState ? "true" : "false" ) + "}" ; server.send( 200 , "application/json" , jsonResponse); / / 返回 JSON 数据 } void handleControlAlarm() { String state = server.arg( "state" ); / / 获取控制参数 if (state = = "on" ) { alarmState = true; / / 通过软串口将控制命令发送出去 Serial.println( "ALARM_ON" ); Serial.println( "报警器已开启" ); alarmState = "开启" ; digitalWrite(BEEPER_PIN, LOW); / / 启动蜂鸣器 } else if (state = = "off" ) { alarmState = false; / / 通过软串口将控制命令发送出去 Serial.println( "ALARM_OFF" ); Serial.println( "报警器已关闭" ); alarmState = "关闭" ; digitalWrite(BEEPER_PIN, HIGH); / / 关闭蜂鸣器 } / / 返回 JSON 响应 String jsonResponse = String() + "{\"success\": \"" + alarmState + "\"}" ; server.send( 200 , "application/json" , jsonResponse); / / 返回控制成功的响应 } |
分类:
4_2Stm32-arduino
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通