随着微信公众号和微信小程序的兴起,移动应用的缺点开始凸显,尤其是那些功能不多、不需要很亮屏的应用。它们完全可以被微信公众号或小程序取代。因此,公司也打算向微信公众号发展。本文将基于微信硬件平台和机智云平台实现一个简单的demo来控制硬件。1.申请微信公众号
首先,我们需要申请一个微信公众号。
注意不能申请订阅号(不支持微信认证)。我们将申请一个服务号并完成认证操作,然后我们可以打开“设备功能”模块,最后添加一个产品。这里我们先用微信测试号顶一下。注册地址:
最终,你会得到两件装备:
当然,你也可以在开发初期使用测试号进行调试。
2.准备一个可以连接机智云的设备
在微信连接之前,需要确保设备可以与机智云正常通信。该装置的具体开发过程如下。
注意在WIFI模块中,写入时需要配置公众号原ID。不过这款产品并没有使用wifi固件,而是通过运行系统的设备上的app实现了相关协议和机智云联通,所以我们将使用机智云提供的一个so库:
将库导入到项目中,并导入到项目中,如下图:
此时,只要app在运行,微信就可以搜索到。
3.设备二维码
微信客户端APP可以通过扫描二维码添加设备。为了使已成功连接机智云的设备能够被微信控制,请在微信公众平台创建产品时选择以下设置。设置如下:
其中:连接类型选择“Wi-Fi”设备;
产品添加方法选择“每个型号的唯一二维码”。添加产品成功后,微信会为该产品生成唯一的二维码。通过扫描这个独特的二维码,可以在近场找到微信分发网络。如果您选择“每个产品的唯一二维码”,那么将为该产品的每个产品生成一个二维码。扫描二维码直接绑定设备,但无法通过 绑定;
产品配置方式选择“微信配网”和“不使用加密”。
4.设备授权
设备不仅要在WIFI固件中写入公众号原ID(注意,不要),还要将所有设备的Mac地址注册到微信服务器。一开始微信只给你100个配额,也就是你只能授权100台设备。
授权的方法是向微信接口发送请求。详情请参考微信文档-设备授权。
很多小伙伴回应,授权经常失败。这里我们给出一组基于WIFI通信的例子,大家可以参考:
注:12位数字,代表设备的Mac地址,id指设备ID,机智云的did。但是因为设备必须在线,机智云会分配一个do,所以我们无法预测这个do是什么。通常的做法是将 id 和 mac 都设置为设备的 Mac 值。
它可以留空并设置为空字符串,但不能缺少此字段。
为0时,表示添加设备,后跟一个字段(产品ID,在公众号的“设备功能”中,添加产品后会有这个ID)。为1时,表示更新设备,此时不需要任何字段。
批量许可时,记得更新顶部:.
这样,我们在硬件(设备)层面的准备工作就完成了。
5.中期业绩
好了,到了这一步,你可以稍微犒赏一下自己,享受阶段性的成果!
打开你的微信(确保它已连接到wifi)并扫描你的产品的二维码。
下面有两个按钮,绿色按钮是启动微信,将WIFI账号密码发送到设备的WIFI模块。但是由于我们的设备可以自己联网,所以这部分并不是真正需要的。
部分设备需要开启匹配模式才能配置上网。一般是先启动设备的匹配模式,再使用微信的配置功能。配置完成后会自动跳转到设备搜索界面。
在搜索界面,如果前面的准备工作都做好了,就可以发现设备(无论是否绑定)。单击发现的设备,然后绑定。微信会自动跳转到公众号页面。然后,你可以在微信的设置页面中再找到一项:设备。
当然,上面的操作只是为了实现绑定操作。以下教程将向您展示如何监控设备的数据点。
6.业务服务器搭建
设备没有问题,我们现在需要的是控制设备本身的功能。
既然设备已经和机智云正常通信了,那么设备的操作其实就是如何与机智云交互的。
7.机智云设备绑定
现在用户已经在微信中绑定了设备,他想查看设备的在线状态。该怎么办?
我们使用微信作为唯一标识符来生成匿名用户。何时注册匿名用户?微信绑定设备时,会向我们的业务服务器推送设备绑定事件消息。此时,我们将同时完成注册匿名用户和绑定用户/设备的操作。
微信绑定的时候,会发送这样一个事件消息:
我们需要的是一个和Mac,然后我们调用机智云的Java-SDK:
DeviceInfo deviceInfo = OpenApi.bindDevice(
wechatOpenId,
gizwitsAppId,
gizwitsProductKey,
gizwitsProductSecret,
mac,
deviceAlias,
deviceRemark)
参数名称类型说明
在微信中,即在机智云注册的匿名用户
机智云产品绑定的APP的id
机智云产品密钥
机智云产品
苹果电脑
设备的 Mac 地址
设备别名
设备说明
这种方法一次解决了两个问题:注册匿名用户和绑定用户/设备。相反,需要设置很多参数。所有参数都是类型。
(设备别名)和(设备备注)都可以填写空白字符串“”。这是您在开发者中心创建的产品。
但是,它是与产品对应的密钥,可以在产品详细信息中找到。
机智云中应用的ID。因为一个产品可能被多个APP操作,比如IOS APP、APP、网站Web应用,甚至微信这样的轻应用,都可以看做是一个APP。因此,在创建产品后,您还可以将一个或多个应用程序绑定到该产品。这里是我们绑定的APP的ID。请注意,APP必须与产品绑定后才能使用。
调用该方法时,可以注册一个匿名用户并绑定用户/设备。是不是很方便?当然,为了方便,你可以进一步封装这个SDK。这里就不展开了。
8.解绑机智云设备
解绑操作也是类似的逻辑。当微信推送解绑事件消息时,我们会进行解绑操作。同时调用 SDK:
Boolean isSuccess = OpenApi.unbindDevice(wechatOpenId, gizwitsAppId, gizwitsDid);
参数名称 属性说明
在微信中,即在机智云注册的匿名用户
机智云产品绑定的APP的id

9.了解设备在线状态
Boolean isOnline = OpenApi.getDeviceOnlineStatus(wechatOpenId, gizwitsAppId, gizwitsDid);
参数名称 属性说明
在微信中,即在机智云注册的匿名用户
机智云产品绑定的APP的id
机智云中的设备ID,设备重置时会重新注册
10.代码示例
请注意,有些开发者在部署服务器时可能会发现部署失败。登录会报错:
javax.net.ssl.SSLException:java.security.ProviderException:java.security.KeyException
这是因为它在 SDK 中的访问方式。
解决方法是:升级服务器环境中的库:nss。
11.微信页面操作装置
好了,我们现在已经绑定了设备,也可以知道设备的在线状态了。但是我们究竟如何操作我们的设备呢?好的体验,当然要有互动页面。
让我们一步步搭建一个交互式页面来监控我们的设备!
12.获取
当用户点击一个页面时,我们如何知道它是哪个用户?我们需要获取当前用户来识别是哪个用户。如何得到它?详情请参考微信官方文档。
简单来说就是我们向微信服务器发送一个授权请求,微信会判断我们请求的URL是否是授权域名。如果验证通过,它会通过几个参数转发到我们的 URL。
最重要的参数是code,我们可以通过Code获取。然后,我们将返回页面。
13.连接机智云
为了访问机智云,我们将其封装成一个JS-SDK。您需要做的就是将其导入页面。
14.初始化服务
首先,构建一个服务:
该服务将负责以下所有操作,包括:连接设备、读取设备数据点、操作设备等。
参数名称 属性说明
目标API域名
协议格式:(自定义协议);(标准数据点协议)
当前访问的微信用户
机智云产品绑定的APP的id
当然,此时服务并没有运行,我们仍然需要初始化运行。但是在运行之前,我们可以选择配置一个回调函数,初始化后会自动运行。
执行 .init() 时,初始化服务,将匿名用户绑定的所有设备放入回调函数中。

而我们要做的操作应该写在回调函数中。里面。
列表中的每个设备都会有六个属性,分别是(产品密钥)、(设备别名)、did(设备ID)、mac、(在线状态)、(设备备注)。我们可以根据情况使用。
15.设备列表
在上面的操作中,我们得到了设备列表。一般来说,客户可能有多个设备,所以在这一步,我们可以做一个设备列表,用户可以决定操作哪个设备。
16.连接设备
如果我们要操作特定的设备,我们将连接到哪个设备:.(did)。当然,连接成功后,还有一个回调函数:..这个回调函数没有传入任何值。
请注意,在连接设备之前,必须对其进行初始化。
初始化和连接设备不是同步操作,如果只是一个接一个地执行,可能会出现错误。所以建议连接设备的操作可以放在初始化的回调函数中,保证执行顺序。
连接成功后,我们就可以收到设备上报的数据了。上报的数据通过回调函数传递: ..回调函数会有一个回调值(参数),回调值的格式如下:
在上面的操作中,我们得到了设备列表。一般来说,客户可能有多个设备,所以在这一步,我们可以做一个设备列表,用户可以决定操作哪个设备。
连接设备
如果我们要操作特定的设备,我们将连接到哪个设备:.(did)。当然,连接成功后,还有一个回调函数:..这个回调函数没有传入任何值。
请注意,在连接设备之前,必须对其进行初始化。
初始化和连接设备不是同步操作,如果只是一个接一个地执行,可能会出现错误。所以建议连接设备的操作可以放在初始化的回调函数中,保证执行顺序。
连接成功后,我们就可以收到设备上报的数据了。上报的数据通过回调函数传递: ..回调函数会有一个回调值(参数),回调值的格式如下:
17.手动读取:设备数据点
获取设备的数据点也很简单,不带任何参数调用.read()方法即可。调用该方法,一次就可以获取,同样的,数据也是通过回调函数., 或者.
18.连接错误
当发生连接错误时,. 函数被调用,必要时可以重写;回调值是错误消息:
gizwits.onError = function(value){
console.log("error!!!!:::::", value.toString());
}
19.设备上线下线
当设备上线或下线时,服务会调用 .d 回调函数。
回调值有两个参数:did 和 ()。
gizwits.onOnlineStatusChanged = function(value) {
alert("设备上下线通知,did=", value.did);
alert("设备上下线通知,is_online=", value.is_online);
}
20.控制设备
最后是设备的遥控器。
遥控器的调用方法,如果=,使用.send()方法,如果=,使用.()方法。
遥控器的值,如果=,请输入p0,如[,,…];如果=,请输入,如{"":true}。
以下是远程控制 RBG 灯的代码示例:
var command = '{"LED_R": 0, "LED_G": 0, "LED_B": 0}';
gizwits.write(did, JSON.parse(command));
当然小程序开发获取硬件信息,使用控制设备的前提是我们已经连接了一个设备。