当前位置: 首页 > 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算法在进行信号分析时,将一段时序信号分解成不同频段的几个子信号,但其分解效果的好坏由其两个参数影响较大—…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

【汇编逆向系列】六、函数调用包含多个参数之多个整型-参数压栈顺序,rcx,rdx,r8,r9寄存器

从本章节开始&#xff0c;进入到函数有多个参数的情况&#xff0c;前面几个章节中介绍了整型和浮点型使用了不同的寄存器在进行函数传参&#xff0c;ECX是整型的第一个参数的寄存器&#xff0c;那么多个参数的情况下函数如何传参&#xff0c;下面展开介绍参数为整型时候的几种情…...

深入理解 C++ 左值右值、std::move 与函数重载中的参数传递

在 C 编程中&#xff0c;左值和右值的概念以及std::move的使用&#xff0c;常常让开发者感到困惑。特别是在函数重载场景下&#xff0c;如何合理利用这些特性来优化代码性能、确保语义正确&#xff0c;更是一个值得深入探讨的话题。 在开始之前&#xff0c;先提出几个问题&…...

【JavaEE】万字详解HTTP协议

HTTP是什么&#xff1f;-----互联网的“快递小哥” 想象我们正在网上购物&#xff1a;打开淘宝APP&#xff0c;搜索“蓝牙耳机”&#xff0c;点击商品图片&#xff0c;然后下单付款。这一系列操作背后&#xff0c;其实有一个看不见的“快递小哥”在帮我们传递信息&#xff0c;…...