ESP8266给微信发消息,超阈值报警,消息提醒等-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8257|回复: 8

ESP8266给微信发消息,超阈值报警,消息提醒等

[复制链接]
发表于 2019-10-17 16:18 | 显示全部楼层 |阅读模式
本帖最后由 bemfa 于 2020-3-1 14:26 编辑

原理图.png


材料准备

ESP8266一块
手机一块

第一下载ESP8266示例(arduino ide编程开发)

下载地址:http://www.cloud.bemfa.com/zip/be_wechat.zip
AT版本 下载地址:http://www.cloud.bemfa.com/zip/at_wechat.zip

本demo 是利用arduino IDE开发,开发板:NodeMCU,关于arduino IDE 的ESP8266环境配置论坛有很多了,或者可参考:环境配置: http://bbs.bemfa.com/6


需要修改的地方:



[mw_shl_code=arduino,true]/******************************************************************************/
#define DEFAULT_STASSID  "HTC"                              //WIFI名称
#define DEFAULT_STAPSW   "abc123456"                        //WIFI密码

String uid = "f49412ea7657d8f738cafe29bc245c14";             // 用户私钥,巴法云控制台获取
String type = "1";                                           // 1表示是预警消息,默认即可
String device = "人体红外传感器设备";                           // 设备名称,可随意更改
String msg = "检测到班主任已站在窗户边,立即放下手机假装学习";       //发送的消息,可随意更改
String msg2 = "小样";                                         //消息备注,可为空,可随意更改
int delaytime = 0;                                          //为了防止被设备“骚扰”,可设置贤者时间,单位是秒,如果设置了该值,在该时间内不会发消息到微信,设置为0立即推送。
String ApiUrl = "http://ai.bemfa.com/api/wechat/v1/";        //默认 api 网址

/******************************************************************************/[/mw_shl_code]

用户私钥可以巴法云控制台http://www.cloud.bemfa.com/tcpfast.php获取,微信扫码登陆后,即可在巴法创客云控制台获取。

邮箱注册的用户,需要在控制台点击“绑定微信”,进行绑定,不然没法推送消息。

绑定.png

登陆完成后,可在控制台看到自己的**私钥UID **,如下所示:第二种

uid.png

示例程序讲解

示例代码是检测D7引脚,当有高电平时,调用发送预警信息的函数,发送预警信息。


大家玩的时候,想要发送信息可以自定义更改,可以阈值报警,消息提醒等,脑洞自由发挥。


[mw_shl_code=arduino,true]/*
* 微信通知提醒
* 2019-10-17
* QQ 1217882800
*/

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

#define sensor    D7  //红外传感器输入口
/******************************************************************************/
#define DEFAULT_STASSID  "HTC"                              //WIFI名称
#define DEFAULT_STAPSW   "abc123456"                        //WIFI密码

String uid = "f49412ea7657d8f738cafe29bc245c14";             // 用户私钥,巴法云控制台获取
String type = "1";                                           // 1表示是预警消息,默认即可
String device = "人体红外传感器设备";                           // 设备名称
String msg = "检测到班主任已站在窗户边,立即放下手机假装学习";       //发送的消息
String msg2 = "小样";                                         //消息备注,可为空
int delaytime = 0;                                          //为了防止被设备“骚扰”,可设置贤者时间,单位是秒,如果设置了该值,在该时间内不会发消息到微信,设置为0立即推送。
String ApiUrl = "http://ai.bemfa.com/api/wechat/v1/";        //默认 api 网址

/******************************************************************************/
static uint32_t lastWiFiCheckTick = 0;


//=======================================================================
//              WIFI重新连接函数
//=======================================================================
void startSTA(){
  WiFi.disconnect();
  WiFi.mode(WIFI_STA);
  WiFi.begin(DEFAULT_STASSID, DEFAULT_STAPSW);
}


//=======================================================================
//              WIFI状态检测函数,如果WIFI断开自动重连
//=======================================================================
void doWiFiTick(){
    if ( WiFi.status() != WL_CONNECTED ) {
        //未连接1s重连
        if (millis() - lastWiFiCheckTick > 1000) {
          lastWiFiCheckTick = millis();
          startSTA();
        }
      }
}

//=======================================================================
//                    初始化
//=======================================================================

void setup() {
  pinMode(sensor, INPUT);   // declare sensor as input
  delay(1000);
  Serial.begin(115200);
  WiFi.mode(WIFI_OFF);        //Prevents reconnection issue (taking too long to connect)
  delay(1000);
  WiFi.mode(WIFI_STA);        //This line hides the viewing of ESP as wifi hotspot
  
  WiFi.begin(DEFAULT_STASSID, DEFAULT_STAPSW);     //Connect to your WiFi router
  Serial.println("");

  Serial.print("Connecting");
  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  //If connection successful show IP address in serial monitor
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(DEFAULT_STASSID);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());  //IP address assigned to your ESP
}

//=======================================================================
//                    主循环
//=======================================================================
void loop() {
  doWiFiTick();

    long state = digitalRead(sensor);
    if(state == HIGH) {
      Serial.println("people here");
      doHttpStick();//在想推送消息的地方执行推送函数即可
      delay(1000);
    }
    else {
      Serial.println("no people");
      delay(1000);
      }
}


//******微信消息推送函数********//
void doHttpStick(){  //微信消息推送函数
  HTTPClient http;    //Declare object of class HTTPClient
  String postData;
  //Post Data
  postData = "uid="+uid+"&type=" + type +"&time="+delaytime+"&device="+device+"&msg="+msg+"&msg2="+msg2;
  http.begin(ApiUrl);              //Specify request destination
  http.addHeader("Content-Type", "application/x-www-form-urlencoded");    //Specify content-type header
  int httpCode = http.POST(postData);   //Send the request
  String payload = http.getString();    //Get the response payload
  Serial.println(httpCode);   //Print HTTP return code
  Serial.println(payload);    //Print request response payload
  http.end();  //Close connection
  Serial.println("send success");  
  }
//=======================================================================[/mw_shl_code]


第三下载程序到ESP8266可

第四效果展示



app.png




往期精彩帖子:




教程 =(可远程)ESP8266读DHT11温湿度,APP Inventor 制作app实时显示

教程 =ESP8266给微信发消息,超阈值报警,消息提醒等

教程 =(可远程)App Inventor编写安卓应用程序控制ESP8266

教程 = 两个ESP8266通过云端实现远程数据交互


教程 =利用天猫精灵控制NodeMCU(ESP8266)教程 = (开源)ESP8266改装小风扇,app远程控制+天猫精灵控制




发表于 2020-2-22 07:02 来自手机 | 显示全部楼层
这个看上去更好玩。学习了
发表于 2020-5-13 20:49 | 显示全部楼层
想问下您连线图是用什么软件画的
 楼主| 发表于 2020-5-18 16:56 | 显示全部楼层
Yy灬牙牙 发表于 2020-5-13 20:49
想问下您连线图是用什么软件画的

fritzing, github搜,有各种扩展
发表于 2021-3-24 15:29 | 显示全部楼层
改了AP配网,可以配网,但是收不到推送的提醒,请大佬看下,跪谢!!!
  1. /*
  2. * 微信通知提醒
  3. * 2019-10-17
  4. * QQ 1217882800
  5. * https://bemfa.com
  6. */

  7. #include <ESP8266WiFi.h>
  8. #include <WiFiClient.h>
  9. #include <ESP8266HTTPClient.h>
  10. #include <DNSServer.h>
  11. #include <ESP8266WebServer.h>
  12. #include <WiFiManager.h>

  13. #define sensor    D7  //红外传感器输入口
  14. /******************************************************************************/

  15. String uid = "ed5c4b420f53e61f30921c4c83c36d8e";             // 用户私钥,巴法云控制台获取
  16. String type = "1";                                           // 1表示是预警消息,默认即可
  17. String device = "人体红外传感器设备";                           // 设备名称
  18. String msg = "有人进入,请及时处理!!!";       //发送的消息
  19. String msg2 = "车间";                                         //消息备注,可为空
  20. int delaytime = 4;                                          //为了防止被设备“骚扰”,可设置贤者时间,单位是秒,如果设置了该值,在该时间内不会发消息到微信,设置为0立即推送。
  21. String ApiUrl = "http://ai.bemfa.com/api/wechat/v1/";        //默认 api 网址

  22. /******************************************************************************/
  23. static uint32_t lastWiFiCheckTick = 0;


  24. //=======================================================================
  25. //              WIFI重新连接函数
  26. //=======================================================================
  27. void startSTA(){
  28.   WiFi.disconnect();
  29.   WiFi.mode(WIFI_STA);
  30. }


  31. //=======================================================================
  32. //              WIFI状态检测函数,如果WIFI断开自动重连
  33. //=======================================================================
  34. void doWiFiTick(){
  35.     if ( WiFi.status() != WL_CONNECTED ) {
  36.         //未连接1s重连
  37.         if (millis() - lastWiFiCheckTick > 1000) {
  38.           lastWiFiCheckTick = millis();
  39.           startSTA();
  40.         }
  41.       }
  42. }

  43. //=======================================================================
  44. //                    初始化
  45. //=======================================================================

  46. void setup() {
  47.    Serial.begin(9600);      
  48.     // 建立WiFiManager对象
  49.     WiFiManager wifiManager;
  50.    
  51.     // 自动连接WiFi。以下语句的参数是连接ESP8266时的WiFi名称
  52.     wifiManager.autoConnect("AutoConnectAP");
  53.    
  54.     // 如果您希望该WiFi添加密码,可以使用以下语句:
  55.     // wifiManager.autoConnect("AutoConnectAP", "12345678");
  56.     // 以上语句中的12345678是连接AutoConnectAP的密码
  57.    
  58.     // WiFi连接成功后将通过串口监视器输出连接成功信息
  59.     Serial.println("");
  60.     Serial.print("ESP8266 Connected to ");
  61.     Serial.println(WiFi.SSID());              // WiFi名称
  62.     Serial.print("IP address:\t");
  63.     Serial.println(WiFi.localIP());           // IP
  64.   pinMode(sensor, INPUT);   // declare sensor as input
  65.   delay(1000);
  66.   Serial.begin(115200);
  67.   WiFi.mode(WIFI_OFF);        //Prevents reconnection issue (taking too long to connect)
  68.   delay(1000);
  69.   WiFi.mode(WIFI_STA);        //This line hides the viewing of ESP as wifi hotspot
  70.   
  71.   Serial.println("");

  72.   Serial.print("Connecting");
  73.   // Wait for connection
  74.   while (WiFi.status() != WL_CONNECTED) {
  75.     delay(500);
  76.     Serial.print(".");
  77.   }

  78.   //If connection successful show IP address in serial monitor
  79.   Serial.println("");
  80.   Serial.print("Connected to ");
  81.   Serial.print("IP address: ");
  82.   Serial.println(WiFi.localIP());  //IP address assigned to your ESP
  83. }

  84. //=======================================================================
  85. //                    主循环
  86. //=======================================================================
  87. void loop() {
  88.   doWiFiTick();

  89.     long state = digitalRead(sensor);
  90.     if(state == HIGH) {
  91.       Serial.println("people here");
  92.       doHttpStick();//在想推送消息的地方执行推送函数即可
  93.       delay(1000);
  94.     }
  95.     else {
  96.       Serial.println("no people");
  97.       delay(1000);
  98.       }
  99. }


  100. //******微信消息推送函数********//
  101. void doHttpStick(){  //微信消息推送函数
  102.   HTTPClient http;    //Declare object of class HTTPClient
  103.   String postData;
  104.   //Post Data
  105.   postData = "uid="+uid+"&type=" + type +"&time="+delaytime+"&device="+device+"&msg="+msg+"&msg2="+msg2;
  106.   http.begin(ApiUrl);              //Specify request destination
  107.   http.addHeader("Content-Type", "application/x-www-form-urlencoded");    //Specify content-type header
  108.   int httpCode = http.POST(postData);   //Send the request
  109.   String payload = http.getString();    //Get the response payload
  110.   Serial.println(httpCode);   //Print HTTP return code
  111.   Serial.println(payload);    //Print request response payload
  112.   http.end();  //Close connection
  113.   Serial.println("send success");  
  114.   }
  115. //=======================================================================
复制代码
发表于 2021-10-5 23:13 | 显示全部楼层
这个有点意思,留下脚印,以备查看
发表于 2021-10-14 13:19 | 显示全部楼层
只能向企业微信推送消息吧?没办法向个人微信推送消息是吗?
发表于 2021-11-22 07:33 | 显示全部楼层
liantao 发表于 2021-10-14 13:19
只能向企业微信推送消息吧?没办法向个人微信推送消息是吗?

我试了,就是个人微信推送消息
发表于 2022-3-17 23:21 | 显示全部楼层
这个有点意思,留下脚印,以备查看
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 06:45 , Processed in 0.164892 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表