微信硬件平台(八)7 综合合并版本

尚未加入自动获取token

#include <ESP8266WiFi.h>

#define WEIXIN_TOKEN  "19_69S6lnr6S-j1Zbmy1XYwx8LqYbKIT2PfmwJUofoBG2fNv_UvfCQmgYdh9TE_m1jJUPimQ7jRVe87h6pmS4Zdl2vCc7ZVx9aRgC0S-3eACtqMTd77VzWX1-p_PjQWBRqkIJAI7OOOPI3bY4xaZNXhAEAMAK"

#define PRODUCT_TYPE  "gh_e93c1b3098b9"                     // 设备种类
#define PRODUCT_ID    "gh_e93c1b3098b9_dae1c2072212185c"    // 设备ID

#define host         "api.weixin.qq.com"                    //微信服务器
#define  httpPort     80                                    //端口

#define ssid      "HUAWEI-H3VBKZ"                          // WIFI名字
#define password  "13991320168"                            // WIFI密码

void setup() {
  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password); //works!

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

/*
功能:5 请求设备绑定的用户ID
输入:
String UESRID    微信用户ID
String CONTENT   要发送的内容
输出:           无
*/
String RequestUserId(){
  Serial.println("/**************************************************/");
  Serial.println("5 request userID! ");

  Serial.print("connecting to ");
  Serial.println(host);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;

  if (!client.connect(host, httpPort)) { //works!
    Serial.println("connection failed");
    return "fail";
  }

  // We now create a URI for the request
  String url = "/device/get_openid";
  url += "?access_token=";
  url +=  WEIXIN_TOKEN;
  url += "&device_type=";
  url += PRODUCT_TYPE;
  url += "&device_id=";
  url += PRODUCT_ID;

  // This will send the request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");
    delay(600);
      Serial.println();
    //处理返回信息
    String line = client.readStringUntil(‘\n‘);
    while (client.available() > 0) {
      line +=‘\n‘;
      line += client.readStringUntil(‘\n‘);

    }
   //Serial.println(line);
    client.stop();

     if(line.indexOf("errcode")>0){
         Serial.println(line);
         return "fail";
      }

    if(line.indexOf("open_id")>0){
      //{"open_id":["ognVI6JsmBGd7lxYTZY4GH29LcNg","ognVI6GpDeseo6Qe_S7hGPgwlt8E","ognVI6CC8_HsPH5zgydb-PZFmxqU","ognVI6FxhqhGVuGhsZbmDyutgsMQ"],"resp_msg":{"ret_code":0,"error_info":"ok"}
     int datebegin= line.indexOf("{");
   //  int dateend=line.length();
     int dateend=line.lastIndexOf("}");
     String datajson=line.substring(datebegin,dateend);

     Serial.println(datajson);
     return datajson;
      }
      else{
           Serial.println("fail");
           return "fail";
      }

  Serial.println();
  Serial.println("closing connection \n");

}

/*
功能:5-1 对用户ID组进行解析拆分
输入:
String json              用户ID组   "ognVI6JsmBGd7lxYTZY4GH29LcNg","ognVI6GpDeseo6Qe_S7hGPgwlt8E","ognVI6CC8_HsPH5zgydb-PZFmxqU","ognVI6FxhqhGVuGhsZbmDyutgsMQ",
String json_ruselt[]     拆分存放的数组
int sizejson             拆分存放的数组大小 默认10
输出:           成功返回1
*/

bool RequestUserId_json(String json,String json_ruselt[],int sizejson){

//    if(json.length()<1){return 0;}
//    DynamicJsonDocument  jsonBuffer(json.length());
//    deserializeJson(jsonBuffer, json);
//    JsonObject root = jsonBuffer.as<JsonObject>();
//
//  String  ueserid1 = root[String("open_id")][0];
//  String  ueserid2 = root[String("open_id")][1];
//  String  ueserid3 = root[String("open_id")][2];
//  String  ueserid4 = root[String("open_id")][3];
//  Serial.println();
//  Serial.println(ueserid1);
//  Serial.println(ueserid2);
//  Serial.println(ueserid3);
//  Serial.println(ueserid4);

     int datebegin= json.indexOf("[")+1;
     int dateend=json.indexOf("]");
     String datajson=json.substring(datebegin,dateend);
     datajson= datajson+‘,‘;

    // Serial.println(datajson);

      /*
      ognVI6JsmBGd7lxYTZY4GH29LcNg   dongdong
      ognVI6GpDeseo6Qe_S7hGPgwlt8E
      ognVI6CC8_HsPH5zgydb-PZFmxqU
      ognVI6FxhqhGVuGhsZbmDyutgsMQ

      */
      int i=0;
     while(datajson.length()>0){
      int idbegin=0;
      int idend=datajson.indexOf(",");
      String id=datajson.substring(idbegin,idend);
      id=id.substring(1,id.length()-1);

      if(i<sizejson){
      json_ruselt[i]=id;
      i++;}

    //  Serial.println(id);
      datajson=datajson.substring(idend+1,datajson.length());
     }

     return 1;
  }

/*
功能:6 给制定用户推送消息
输入:
String UESRID    微信用户ID
String CONTENT   要发送的内容
输出:           无
*/
void SendMsgToUser(String UESRID,String CONTENT){
  Serial.println("/**************************************************/");
    Serial.println("6 send msg to user! ");

    String data =(String) "{"
   + " \"touser\":\""+UESRID+"\","
   + " \"msgtype\":\"text\","
   +  "\"text\" :"
   +  "{ \"content\":\""+CONTENT+"\", }"
   + "}"  ;

  Serial.print("connecting to ");
  Serial.println(host);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;

  if (!client.connect(host, httpPort)) { //works!
    Serial.println("connection failed");
    return;
  }

  // We now create a URI for the request
  String url = "/cgi-bin/message/custom/send";
  url += "?access_token=";
  url += WEIXIN_TOKEN;

      int length = data.length();

      String postRequest =(String)("POST ") + url + " HTTP/1.1\r\n" +
          "Content-Type: application/json;charset=utf-8\r\n" +
          "Host: " + host + ":" + httpPort + "\r\n" +
          "Content-Length: " + length + "\r\n" +
          "Connection: Keep Alive \r\n" +
          +"\r\n"
          +data
          +"\r\n";
      // Serial.println(postRequest);
       client.print(postRequest);

    delay(600);
    //处理返回信息
    String line = client.readStringUntil(‘\n‘);

    while (client.available() > 0) {
      line +=‘\n‘;
      line += client.readStringUntil(‘\n‘);

    }

    Serial.println(line);
    client.stop();

  Serial.println();
  Serial.println("closing connection!");

  }

int msgnum=0;

void loop() {

  if(msgnum<100){
  msgnum++;}
  else { msgnum=0;  }

  delay(10000);

  String json_alluser_id= RequestUserId(); // 得到用户ID组
   if(json_alluser_id!="fail"){
            String json_user_id[10];  // 用户ID组解析,存放到数组json_user_id
            RequestUserId_json(json_alluser_id,json_user_id,10); // 用户ID组解析,存放到数组json_user_id

                for(int i=0;i<10;i++){
                if(json_user_id[i]!=""){
                Serial.println(json_user_id[i]);
               // String UESRID="ognVI6JsmBGd7lxYTZY4GH29LcNg";
                String CONTENT=(String)"这是来自ESP8266发送的第"+msgnum+"条消息:\r\n  电量统计: 98\r\n 空气质量: 89\r\n 连接地址:<a href=http://www.qq.com >!";
                SendMsgToUser(json_user_id[i],CONTENT);
                }
                else{

                  }
              }

  }
}

  

原文地址:https://www.cnblogs.com/kekeoutlook/p/10468625.html

时间: 2024-08-28 01:30:37

微信硬件平台(八)7 综合合并版本的相关文章

微信硬件平台框架说明及接入流程

微信硬件平台框架说明及接入流程1 / 15 硬件平台框架说明及接入流程 V0.5 Tencent Confidential 硬件平台框架说明及接入流程 2 / 15 文档变更日志 部门 微信事业群\开放平台创新部\创新二组 版本 描述 撰写人员 更新日期 V0.1 初稿 jeffqi.genewu 2014/07/8 V0.2 加入Q&A jeffqi.genewu 2014/07/8 V0.3 针对常见问题,增加说明.流程图优化. jeffqi.genewu 2014/07/9 V0.4 添加

微信硬件平台 (1) 总说明

微信硬件平台 本文目的,使用微信公众号控制ESP8266的LED开和关.进一步使用微信当遥控器(避免写APP或者IOS或者小程序),控制一切设备.给两个关键的总教程参考. 官网教程  微信硬件平台 微信控制arduino点亮LED教程 目前整体测试效果 打开微信,关注自己的公众号 功能结构图 1 公众号注册 1.申请认证公众号&开通设备功能 1.1公众号申请: https://mp.weixin.qq.com 个人订阅号    功能有限,不能有设备管理模块功能,本教程系列使用的是订阅号,做一个测

微信硬件平台

调用openApi 微信硬件平台是微信推出连接物与人,物与物的IOT解决方案.也就是说可以通过微信控制各种智能设备.比如一些蓝牙设备.空调.电视等等. 我本身不懂硬件(虽然是电子信息专业),硬件是北航的两个研究生在弄,小团队里我负责开发H5自定义面板,刚开始看官方文档各种迷糊,对于jssdk.jsapi.Airkiss.openApi.直连SDK都不知道该用哪个做,官方论坛问问题基本上没结果,加了几个微信硬件群问问题,发现好些开发者和我一样,同一个问题,发到几个群里问,画面好心酸.给wxthin

微信硬件平台的基础接入和硬件云标准接入分析

本文分析基于微信硬件平台的物联网架构,将从物联网的核心要素.物联网的关键场景.微信硬件平台的通信协议分析三个维度去分析.更多的微信硬件平台开发的深度技术原创分享请订阅微信公众号:嵌入式企鹅圈. 微信硬件平台包括基础接入方案与微信硬件云标准接入方案.前者是在应用端和设备端都完全由厂商开发,微信硬件平台只负责用户管理.设备管理和透明的消息推送:后者是在前者的基础上,给设备端提供了直连SDK(可以适配linux/Android等平台).提供设备API给第三方硬件平台接入,甚至在应用端根据各种家电场景定

一张图读懂基于微信硬件平台的物联网架构

本文从物联网的核心要素.物联网的关键场景.微信硬件平台的通信协议分析三个维度去分析基于微信硬件平台的物联网架构.相关的背景知识请阅读微信公众号:嵌入式企鹅圈发布的有关物联网和微信硬件专题文章. 一. 基于微信硬件平台的物联网架构图示 上图涵盖以下信息: 1.   基于微信硬件平台的物联网的架构组成,有微信公众平台/硬件平台.第三方厂商云后端.手机微信/公众号.微信硬件设备终端(Wifi和蓝牙BLE). 2.   绿色代表腾讯向开发者和公众提供的基础平台和服务,并通过红色(airsync/airk

合并版本冲突解决方案

当合并版本冲突的时候,Xcode打不开了 1.用终端,打开项目 cd /Users/handlecar/Porsche 2.打开项目,这样系统会提示一些信息,告诉你为什么打不开 xcodebuild -project HandleiPad.xcodeproj

微信Wifi物联架构---机智云/云智易如何接入微信硬件平台

本文由嵌入式企鹅圈原创团队成员-华南师范大学物联网创新中心黄鑫执笔. 嵌入式企鹅圈已经就微信蓝牙物联架构做过很多次的分析了,这里就不再啰嗦了.这里主要分析物联网远场控制场景,就是wifi物联,当然也包括GPRS.3G.4G等等. 一.微信wifi物联的使命 基于Wifi物联网平台很早就有了,远在微信硬件平台出现之前,所以在wifi物联方面,微信除了抱着一个极大的流量入口,其他方面并不具有什么优势.马化腾说过微信硬件是要连接一切嘛,那微信硬件自然要去适配已经存在的平台和设备.而已有的wifi物联平

微信硬件平台(二) 企业服务号号设备注册和绑定

该教程目的:在教程1里,完成了微信服务器向自己的服务器转发公众号收到的数据.但是缺少用户认证,设备注册,设备绑定等功能.这里使用调试助手模拟一个实际的设备(空调,灯),直接向微信硬件云注册和授权,绑定个人的微信账号.这里暂时没有用的自己的服务器. 微信教程 网友调试过程    微信硬件平台下设备与微信通信 需要: 1 申请一个服务号(必须有企业组织代码,法人等信息). 没有公司的开通一个测试账号.这里使用的是一个公司注册后的服务号. 2 在公众号-设备功能-添加几个设备 (图标随便上传的) 因为

微信硬件平台(六) 设备直连微信云

微信硬件开发文档 智能硬件厂家的痛点 微信硬件平台是基于微信公众号体系的智能硬件平台,在公众号的技术架构里,设备厂商必须要有自己的服务器.厂商服务器主要完成两部分工作: 1.管理设备的连接登录.鉴权.状态上报.命令发送.固件更新等基础网络功能: 2.通过H5页面或者微信公众平台消息接口,接收设备用户的操作命令,处理设备业务逻辑,展示设备状态给微信用户. 这两部分工作相对独立. 对于硬件设备厂家来说,服务器第一项工作受到各种因素限制,实现起来相对困难,增加了研发投入时间.精力.资金成本. 同时各个