智能家居——智能提示音(云市场)
经过前面几节的介绍和实际操作,大家对阿里云的平台和阿里云入门套件也有一定的熟悉了。这节就来认识一下云市场,并购买我们所需要的产品,然后连结到阿里云入门套件,看看会产生什么样的效果。本节我们需要在云市场中购买墨迹天气这个服务,通过墨迹天气,我们可以获得当前的天气情况和天气预报,当下雨或者是烈日,墨迹天气通过阿里云平台上报到我们的主控板esp32,然后通过开发服务联系到喇叭来播放音乐,以此来通知我们,我们可根据播放的音乐及时做好防雨防晒的准备。所需材料:阿里云入门套件 x1
智能手机 x1
一、搭建阿里云平台
进入阿里云平台:https://iot.aliyun.com 1.创建产品,名为智能提示音,增加自定义功能,具体如图所示
2.创建设备,从属于智能提示音产品,命名为SmartSound,获得设备三元组
3.将智能提示音产品导入智能家居项目中。
创建开发服务,名为:智能提示音
进入开发服务页面,点击左侧的节点,在节点列表中选择功能->HTPP请求,并将其拖动到服务画布内,把这个设备触发节点改为城市ID输入添加一个新增参数。由于后面查询天气的时候需要用到所在城市,因此API参数设定为字符“cityId”,配置如图所示。添加一个云市场API节点。选中功能->API->云市场API。并将其改为墨迹天气4.购买墨迹天气服务。 打开新页面前往阿里云市场选择API,购买墨迹天气服务,该服务是免费的.
a.获取AppCode。墨迹天气购买成功后,回到物联网平台,选中左侧导航栏的产品与服务,搜索“云市场”即可找到AppCode。
复制该AppCode值到墨迹天气的配置栏“AppCode”即完成了AppCode的配置
b.获取精简实况的调用地址和请求方式。回到刚才的云市场页面,点击“免费版气象服务(cityid)-墨迹天气”,进入购买页面,下拉点击精简实况,即可获取精简实况的调用地址和请求方式
复制该调用地址即可配置“墨迹天气”的调用地址,并将该请求方式改为“POST”,c.获取成都温江的cityid参数。在刚才的购买页面上点击产品详情->cityid对照表,即可获取各个城市的城市ID,通过它我们可以指定获取某个城市的天气信息下载后,可得到各城市的Id,如温江为2637d.获取token参数。回到物联网平台,选择左侧的产品与服务,搜索API 网关,点击API网关,选择“华北2(北京)”,选择左侧导航栏的调用API->已购买API。点击查看->精简实况。下拉网页即可找到token信息,如下图所示:
e.配置“墨迹天气”的编码方式和参数。如此即可获取成都温江的天气信息了。由此“墨迹天气”节点则配置完成。5.获取墨迹天气节点的输出信息。选择左侧导航栏的功能->HTTP返回,点击部署->调试,输入城市ID:2637(温江),点击开始调试。 鼠标选中墨迹天气节点,点击右侧栏节点日志,即可获取墨迹天气节点的输出信息添加条件判断节点信息。选择功能->条件判断节点,并将其节点名称改为“温江温度”,选择任意一个满足条件,配置为:上一个节点+ data.condition.temp,<;静态数据,数值型,20添加2个智能提示音设备。选中设备->智能提示音,一个连接到“温江温度”的满足条件接口,并将设备节点名改为“提示音0”,将控制设备配置好,播放提示音为数值型,1;另一个连接到“温江温度”的不满足接口,并将歌曲改为“提示音1”,将控制设备配置好,播放提示音为数值型,1,添加HTTP返回节点。配置为上一节点。将城市ID输入、墨迹天气、温江温度、提示音0/1、HTTP返回连接起来,再点击部署->调试,即可播放相应的提示音二、程序编译 将喇叭插入A4口。源程序如下:#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "DFRobot_Aliyun.h"
#include "Tone32.h"
#include "music_joy.h"
#define SPEARKER_PINA4
/*配置WIFI名和密码*/
const char * WIFI_SSID = "WIFI_SSID";
const char * WIFI_PASSWORD = "WIFI_PASSWORD";
/*配置设备证书信息*/
String ProductKey = "you Product Key";
String ClientId = "12345";
String DeviceName = "you Device Name";
String DeviceSecret = "you Device Secret";
/*配置域名和端口号*/
String ALIYUN_SERVER = "iot-as-mqtt.cn-shanghai.aliyuncs.com";
uint16_t PORT = 1883;
/*需要操作的产品标识符*/
String Identifier = "you Identifier";
/*需要订阅的TOPIC*/
const char * subTopic = "you sub Topic";//****set
DFRobot_Aliyun myAliyun;
WiFiClient espClient;
PubSubClient client(espClient);
uint8_t beginPlay = 0;
uint8_t playWitchOne = 0;
/*播放凉凉*/
static void playLiangLiang(){
for (int i = 0; i < sizeof(liangliangData)/sizeof(liangliangData); i++) {
int noteDuration = liangliangDurations *600;
tone(SPEARKER_PIN, liangliangData,noteDuration);
}
noTone(SPEARKER_PIN);
}
/*播放天空之城*/
static void playCastleInTheSky(){
for (int i = 0; i < sizeof(CastleInTheSkyData)/sizeof(CastleInTheSkyData); i++) {
int noteDuration = CastleInTheSkyDurations *600;
tone(SPEARKER_PIN, CastleInTheSkyData,noteDuration);
}
noTone(SPEARKER_PIN);
}
static void playMusic(){
if(playWitchOne == 0){
playLiangLiang();
}else{
playCastleInTheSky();
}
}
void connectWiFi(){
Serial.print("Connecting to ");
Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID,WIFI_PASSWORD);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.print("IP Adderss: ");
Serial.println(WiFi.localIP());
}
void callback(char * topic, byte * payload, unsigned int len){
Serial.print("Recevice [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < len; i++){
Serial.print((char)payload);
}
Serial.println();
StaticJsonBuffer<300> jsonBuffer;
JsonObject& root = jsonBuffer.parseObject((const char *)payload);
if(!root.success()){
Serial.println("parseObject() failed");
return;
}
playWitchOne = root["params"];
Serial.print("playWitchOne=");
Serial.println(playWitchOne);
beginPlay = 1;
}
void ConnectAliyun(){
while(!client.connected()){
Serial.print("Attempting MQTT connection...");
/*根据自动计算的用户名和密码连接到Alinyun的设备,不需要更改*/
if(client.connect(myAliyun.client_id,myAliyun.username,myAliyun.password)){
Serial.println("connected");
client.subscribe(subTopic);
}else{
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup(){
Serial.begin(115200);
/*连接WIFI*/
connectWiFi();
/*初始化Alinyun的配置,可自动计算用户名和密码*/
myAliyun.init(ALIYUN_SERVER,ProductKey,ClientId,DeviceName,DeviceSecret);
client.setServer(myAliyun.mqtt_server,PORT);
/*设置回调函数,当收到订阅信息时会执行回调函数*/
client.setCallback(callback);
/*连接到Aliyun*/
ConnectAliyun();
}
void loop(){
if(!client.connected()){
ConnectAliyun();
}
if(beginPlay == 1){
playMusic();
beginPlay =0;
}
client.loop();
}
}将这部分内容改为自己的环境和设备 下载编译。执行程序。现在你可以测试在你的环境下,能不能通过阿里云平台获取温度,并提示到我们。 服务开发时,部署不成功,提示“只允许一个编排流”,怎么解决? 配置墨迹天气的编码和参数的图片是错的,能重新上传一下嘛? 这是什么问题啊楼主大人 反贪 发表于 2022-4-19 17:00
这是什么问题啊楼主大人
我这都是按照你的步骤做的,但是结果却是这样的
页:
[1]