当前位置: 首页 > news >正文

ESP通过乐为物联控制灯,微信发送数值,ESP上传传感器数据

暂时放个程序

//ME->>{“method”: “update”,“gatewayNo”: “01”,“userkey”: “2b64c489d5f94237bcf2e23151bb7d01”}&^!
//Ser->>{“f”:“message”,“p1”:“ok”}&^!
//ME->>{“method”: “upload”,“data”:[{“Name”:“A1C”,“Value”:“96.2”}]}&^!
//Ser->>{“f”:“message”,“p1”:“ok”}&^!
//Ser->>进入控制设备
//Ser->>{“method”:“send”,“gatewayNo”:“01”,“userkey”:“2b64c489d5f94237bcf2e23151bb7d01”,“f”:“getAllSensors”}&^!
//ME->>{“method”:“response”,“result”:{“successful”:true,“message”:“ok!”,“data”:[{“id”:“A1O”,“value”:“10”},{“id”:“A2O”,“value”:“1”}]}}&^!
//Ser->>点击开关,设定数值
//Ser->>{“method”:“send”,“gatewayNo”:“01”,“userkey”:“2b64c489d5f94237bcf2e23151bb7d01”,“f”:“updateSensor”,“p1”:“A2O”,“p2”:“0”}&^!
//ME->>{“method”:“response”,“result”:{“successful”:true,“message”:“ok!”,“data”:[{“id”:“A1O”,“value”:“10”},{“id”:“A2O”,“value”:“1”}]}}&^!
//或
//ME->>{“method”:“response”,“result”:{“successful”:true,“message”:“Write cmd successful !”}}&^!

#include "Arduino.h"
#include "WiFi.h"const char *ssid = "CMCC-9eUG";const char *password = "apzwqk4u";
// const char *ssid = "X";
// const char *password = "123456789";
//const char *ssid = "HUAWEI P30";
//const char *password = "0000000000";//const IPAddress serverIP(192,168,137,1); //目标地址
//const char *serverIP="17854231380.qicp.vip";
//uint16_t serverPort = 23460;         //目标服务器端口号const char *serverIP="tcp.lewei50.com";
uint16_t serverPort = 9960;         //目标服务器端口号#define USERKEY "2b64c489d5f94237bcf2e23151bb7d01"
//const char *server_Line="{\"method\": \"update\",\"gatewayNo\": \"01\",\"userkey\": \"2b64c489d5f94237bcf2e23151bb7d01\"}&^!";WiFiClient client;   //声明一个客户端对象,用于与服务器进行连接
int A1C_num=0;
int tim1_IRQ_count = 0;
hw_timer_t *tim1 = NULL;
#define LED_PIN 35
#define LED_ON   HIGH
#define LED_OFF  LOW
#define Botton_PIN  0
#define Botton_ON   LOW
#define Botton_OFF  HIGHint LED_Sta=LED_OFF;
double A1O_Num=0;
void LED_Set(int Sta)
{if(Sta==0){LED_Sta=0;digitalWrite(LED_PIN,LED_OFF);}else{LED_Sta=1;digitalWrite(LED_PIN,LED_ON);}
}
//上线
String server_Line(String Decive_num)
{String m_String_01="{\"method\": \"update\",\"gatewayNo\": \"";String m_String_02="\",\"userkey\": \"2b64c489d5f94237bcf2e23151bb7d01\"}&^!";String m_String=m_String_01+Decive_num+m_String_02;return m_String;
}
//上传传感器数据
String Data_Upload(String sensor_Num,int sensor_Data)
{char Num[10]={};String sensor_String_01="{\"method\": \"upload\",\"data\":[{\"Name\":\"";String sensor_String_02="\",\"Value\":\"";String sensor_String_03="\"}]}&^!";String sensor_String=sensor_String_01+sensor_Num+sensor_String_02+String(sensor_Data)+sensor_String_03;return sensor_String;
}
String getAllSensors(String Sensors1_Name,int Sensors1_Num,String Sensors2_Name,int Sensors2_Num)
{String String1="{\"method\":\"response\",\"result\":{\"successful\":true,\"message\":\"ok!\",\"data\":[{\"id\":\"";String String2="\",\"value\":\"";String String3="\"},{\"id\":\"";String String4="\",\"value\":\"";String String5="\"}]}}&^!\"";String String_Dis=String1+Sensors1_Name+String2+String(Sensors1_Num)+String3+Sensors2_Name+String4+String(Sensors2_Num)+String5;return String_Dis;
}
String getAllSensors(String Sensors1_Name,double Sensors1_Num,String Sensors2_Name,int Sensors2_Num)
{String String1="{\"method\":\"response\",\"result\":{\"successful\":true,\"message\":\"ok!\",\"data\":[{\"id\":\"";String String2="\",\"value\":\"";String String3="\"},{\"id\":\"";String String4="\",\"value\":\"";String String5="\"}]}}&^!\"";String String_Dis=String1+Sensors1_Name+String2+String(Sensors1_Num)+String3+Sensors2_Name+String4+String(Sensors2_Num)+String5;return String_Dis;
}String Set_CMD(void)
{String Data="{\"method\":\"response\",\"result\":{\"successful\":true,\"message\":\"Write cmd successful !\"}}&^!";return Data;
}
void setup()
{delay(1000);//IO InitpinMode(LED_PIN,OUTPUT);pinMode(Botton_PIN,INPUT); //INPUT_PULLUP上拉输入Serial.begin(115200);//80Mhz时钟 分频为1Mhztim1 = timerBegin(0, 80, true);                      //初始化定时器 timerBegin                num : 定时器编号 divider:分频数 countUp: 是否是累加模式   timerAttachInterrupt(tim1, tim1Interrupt, true);     //配置定时器中断 timerAttachInterrupt   *timer:目标定时器(计时器结构体指针 hw_timer_t*)   void (*fn)(void) : 中断函数入口地址   是否边沿触发//100mstimerAlarmWrite(tim1, 100000, true);                 //定时器设置timerAlarmWrite             *timer:目标定时器 ( 计时器结构体指针 hw_timer_t * )  alarm_value : 计数上限值  autoreload : 是否重装载.timerAlarmEnable(tim1);                              //使能定时器 timerAlarmEnable  Serial.println();WiFi.mode(WIFI_STA);   //站点模式WiFi.setSleep(false);  //关闭STA模式下wifi休眠,提高响应速度WiFi.begin(ssid, password);Serial.println("wait Wifi");while (WiFi.status() != WL_CONNECTED){delay(2500);Serial.print(".");//WiFi.begin(ssid, password);}Serial.println("connected");Serial.print("location IP:");Serial.println(WiFi.localIP()); 
}
bool Server_Online,WIFI_Online,Server_T_Online;
int WIFI_Test_Time;
char Server_Sta=0;
int Heart_Time=0;
void loop()
{LED_Set(LED_Sta);if (tim1_IRQ_count > 10){tim1_IRQ_count=0;WIFI_Test_Time++;//检测WIFI连接if(WiFi.status() == WL_CONNECTED){WIFI_Online=true;}else{WIFI_Online=false;Server_Online=false;WiFi.begin(ssid, password);Serial.println("WIFI begin");while (WiFi.status() != WL_CONNECTED){delay(2500);Serial.print(".");Serial.print(WiFi.status());WiFi.begin(ssid, password);}WIFI_Online=true;Serial.println("WiFi connected");Serial.print("location IP:");Serial.println(WiFi.localIP());}//检测服务器连接if(client.connected()){Server_Online=true;Server_Sta=1;//Serial.println("server Online");}else{if(client.connect(serverIP, serverPort)){Server_Online=true;Server_Sta=1;Server_T_Online=true;Serial.println("server connect ok");}else{Server_Online=false;Server_Sta=-1;Serial.println("server connect fail");}}if(Server_Online){Heart_Time++;if(Heart_Time>=23){Heart_Time=0;//Serial.println(Data_Upload("A1C",random()%100));Serial.println("Heart A1C");client.print(Data_Upload("A1C",random()%100));}}}if(Server_Online){if(Server_T_Online){Server_T_Online=false;//Serial.println(server_Line("01"));Serial.println("Link server");client.print(server_Line("01"));Server_Sta=2;}if(client.available()){if (client.available()) //如果有数据可读取{String line = client.readStringUntil('\n'); //读取数据到换行符Serial.print("read>>");Serial.println(line);  //服务器返回数据解析if(line.indexOf("\"f\":\"message\",\"p1\":\"ok\"")!=-1)   //上线或上传传感器数值{if(Server_Sta==2)    //上线成功{Server_Sta=3;//Serial.println(Data_Upload("A1C",random()%100));Serial.println("A1C Data");client.print(Data_Upload("A1C",random()%100));}else{if(Server_Sta==3)//上传传感器数值成功{}else{//Serial.print("\"f\":\"message\",\"p1\":\"ok\" Server_Sta");  Serial.println(Server_Sta);}}} if(line.indexOf("\"method\":\"send\",\"gatewayNo\"")!=-1) //切换到控制器界面或开关指令下发{ if(line.indexOf("\"f\":\"getAllSensors\"")!=-1)   //切换到界面{Serial.print("getAllSensors : ");Serial.print("A1O");Serial.print(A1O_Num);Serial.print("A2O");Serial.println(LED_Sta);//Serial.println(getAllSensors("A1O",A1O_Num,"A2O",LED_Sta));client.println(getAllSensors("A1O",A1O_Num,"A2O",LED_Sta));}else{if(line.indexOf("\"f\":\"updateSensor\"")!=-1)  //指令下发{Serial.print("updateSensor>>");if(line.indexOf("\"p1\":\"A2O\"")!=-1){line.remove(0,line.indexOf("A2O"));  //裁切为   A2O","p2":"1"}&^!line.remove(0,11);                   //裁切为   1"}&^!line.remove(line.indexOf("\"}&^!"),5);//裁切为  1LED_Set(line.toInt());Serial.print("A2O");Serial.println(LED_Sta);//Serial.println(getAllSensors("A1O",A1O_Num,"A2O",LED_Sta));//client.print(getAllSensors("A1O",A1O_Num,"A2O",LED_Sta));//Serial.println(Set_CMD());client.print(Set_CMD());}else{if(line.indexOf("\"p1\":\"A1O\"")!=-1){Serial.println("A1O");line.remove(0,line.indexOf("A1O"));  //裁切为   A1O","p2":"1"}&^!line.remove(0,11);                   //裁切为   1"}&^!line.remove(line.indexOf("\"}&^!"),5);//裁切为  1A1O_Num=line.toDouble();Serial.print("A1O");Serial.println(A1O_Num);//Serial.println(getAllSensors("A1O",A1O_Num,"A2O",LED_Sta));//client.print(getAllSensors("A1O",A1O_Num,"A2O",LED_Sta));//Serial.println(Set_CMD());client.print(Set_CMD());}else{Serial.println("Unkown");}}}}}line="";}}}}//ME->>{"method": "update","gatewayNo": "01","userkey": "2b64c489d5f94237bcf2e23151bb7d01"}&^!
//Ser->>{"f":"message","p1":"ok"}&^!
//ME->>{"method": "upload","data":[{"Name":"A1C","Value":"96.2"}]}&^!
//Ser->>{"f":"message","p1":"ok"}&^!
//Ser->>进入控制设备
//Ser->>{"method":"send","gatewayNo":"01","userkey":"2b64c489d5f94237bcf2e23151bb7d01","f":"getAllSensors"}&^!
//ME->>{"method":"response","result":{"successful":true,"message":"ok!","data":[{"id":"A1O","value":"10"},{"id":"A2O","value":"1"}]}}&^!
//Ser->>点击开关,设定数值
//Ser->>{"method":"send","gatewayNo":"01","userkey":"2b64c489d5f94237bcf2e23151bb7d01","f":"updateSensor","p1":"A2O","p2":"0"}&^!
//ME->>{"method":"response","result":{"successful":true,"message":"ok!","data":[{"id":"A1O","value":"10"},{"id":"A2O","value":"1"}]}}&^!
//或
//ME->>{"method":"response","result":{"successful":true,"message":"Write cmd successful !"}}&^!/*定时器中断服务函数*/
void tim1Interrupt()
{tim1_IRQ_count++;
}

相关文章:

ESP通过乐为物联控制灯,微信发送数值,ESP上传传感器数据

暂时放个程序 //ME->>{“method”: “update”,“gatewayNo”: “01”,“userkey”: “2b64c489d5f94237bcf2e23151bb7d01”}&^! //Ser->>{“f”:“message”,“p1”:“ok”}&^! //ME->>{“method”: “upload”,“data”:[{“Name”:“A1C”,“Val…...

Linux:共享内存api使用

代码&#xff1a; #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> #include <arpa/inet.h> #include <sys/un.h> #include <sys/ipc.h…...

android9.0 java静态库操作JNI实例 动态注册

一、java层 源码 目录&#xff1a;/Demo/java/com/android/simpleini/SimpleJNI.java package com.example.simplejni;import android.app.Activity; import android.os.Bundle; import android.widget.TextView;public class SimpleJNI {private IpoManagerService(Context …...

自定义复杂图片水印

我的社交能力还不如5岁儿童和狗。 文章目录前言一、主要工具类总结前言 之前写过一些简单的图片压缩和图片加水印&#xff1a;JAVA实现图片质量压缩和加水印 本次主要是针对图片加水印进行一个升级&#xff0c;图片水印自定义&#xff0c;自适应大小。 来&#xff0c;先看几…...

文章读后感——《人间清醒,内容为王》

观后感 人间清醒&#xff0c;内容为王 - 技术er究竟该如何写博客&#xff1f;1024上海嘉年华之敖丙演讲观后感。 致敬愿意带领后生的前辈——哈哥 哈哥&#xff0c;《人间清醒&#xff0c;内容为王》这篇&#xff0c;我的鱼获&#xff0c; 是里面传递出来写技术博客的思维与想法…...

51单片机入门 - 驱动多位数码管

我使用的是普中51单片机开发板A2套件&#xff08;2022&#xff09;&#xff0c;驱动数码管可能需要参考电路原理图。开发环境的搭建教程在本专栏的 51单片机开发环境搭建 - VS Code 从编写到烧录 有过介绍。 关于我的软硬件环境信息&#xff1a; Windows 10STC89C52RCSDCC &am…...

Java进击框架:Spring(一)

Java进击框架&#xff1a;Spring&#xff08;一&#xff09;前言创建Spring项目Spring IoC容器和Beans介绍Bean的概述Spring IoC配置元数据实例化Bean依赖注入循环依赖详细配置生命周期回调Bean定义继承基于注解的容器配置Component和进一步的原型注解自动检测类和注册Bean定义…...

Java笔记(18)

目录 什么是mvc? 什么是SpringMVC Spring MVC的特点: 原理: 什么是Thymeleaf? thymeleaf依赖包:...

【免费教程】地下水环境监测技术规范HJ/T164-2020解读使用教程

地下水环境监测技术规范依据《中华人民共和国环境保护法》第十一条“国务院环境保护行政主管部门建立监测制度、制订监测规范”和《中华人民共和国水污染防治法》的要求&#xff0c;积极开展地下水环境监测&#xff0c;掌握地下水环境质量&#xff0c;保护地下水水质&#xff0…...

Html 代码学习

场景:在页面中插入音频 代码 常见属性: src 音频的路径 controls 显示播放的控件 autoplay 自动播放 loop 循环播放 场景:在页面中插入视频 代码 常见属性: src 路径 controls 显示播放的控件 autoplay 自动播放 要配合muted 例如 autoplay muted loop 循环播放 链接 /…...

如何通过IP找到地址?

在我们印象中&#xff0c;我们都知道可以通过 IP 地址找到某个人。但当我们细想一下&#xff0c;我们会发现其实 IP 地址与地理位置并不是直接相关的。那我们到底是如何通过 IP 地址找到地址的呢&#xff1f;答案是&#xff1a;通过自治系统&#xff08;Autonomous System&…...

业务单据堆积如山?如何提升会计做账效率?

某集团以“创建现代能源体系、提高人民生活品质”为使命&#xff0c;形成了贯通下游分销、中游贸易储运、上游生产的清洁能源产业链和涵盖健康、文化、旅游、置业的生命健康产品链。目前&#xff0c;某集团在全国21个省&#xff0c;为超过2681万个家庭用户、21万家企业提供能源…...

华为OD机试题,用 Java 解【VLAN 资源池】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…...

面试加分项:JVM 锁优化和逃逸分析详解

1 锁优化JVM 在加锁的过程中&#xff0c;会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。1.1 自旋锁和自适应自旋现在大多的处理器都是多核处理器 &#xff0c;如果在多核心处理器&#xff0c;有让两个或者以上的线程并行执行&#xff0c;我们可以让一个等待…...

C++继承、构造函数和析构函数

构造函数 与 析构函数 构造函数代表一个对象的生成&#xff0c;主要作用是初始化类的成员变量&#xff0c;可以被重载 如果没有显式构造函数&#xff0c;则实例化对象时&#xff0c;系统会自动生成一个无参的构造函数 构造函数的名称与类名相同 析构函数代表的是一个对象的销…...

Python如何实现异步并发之async(1)

前言 本文是该专栏的第14篇,后面会持续分享python的各种干货知识,值得关注。 在python中使用async方式,实现异步并发,而本文笔者提到的代码案例仅支持python3.7及以上版本,这主要在于不同的版本之间都更新了异步的使用方法,这点暂时不详述了。 而所谓的异步,通常就是程…...

震撼!阿里首次开源 Java 10万字题库,Github仅一天星标就超60K

程序员面试 现在是程序员找工作、跳槽最重要的月份。随着行业的发展程序员面试也越来越难&#xff0c;面试中都是7分的能力&#xff0c;再加上3分的技巧&#xff1b; 对于应聘者&#xff0c;重中之重的就是简历&#xff0c;面试前一定要将最拿手和最能吸引面试官的技能在简历…...

十三、RESTful API

RESTful API 什么是RESTful REST一词&#xff0c;是Roy Thomas Fielding在他2000年的博士论文中提出的。 Fielding是一个非常重要的人&#xff0c;他是HTTP协议&#xff08;1.0版和1.1版&#xff09;的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。所…...

路由器防火墙配置(14)

实验目的 通过本实验&#xff0c;理解路由器的防火墙工作原理&#xff0c;掌握路由器的防火墙功能配置方法&#xff0c;主要包括网络地址转换功能和数据包过滤功能的配置。 培养根据具体环境与实际需求进行网络地址转换及数据包过滤的能力。 预备知识网络地址转换 网络地址转…...

灰狼算法优化VMD对时序信号分析python

VMD算法变分模态分解(VMD)算法是一种根据变分方程计算,将信号分析过程转换成求解变分方程的过程,具体分析过程可见前面写的另外一篇博客VMD,这里不多介绍。 VMD算法在进行信号分析时,将一段时序信号分解成不同频段的几个子信号,但其分解效果的好坏由其两个参数影响较大—…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...