螺丝钉yy 发表于 2019-7-9 10:08:59

智能家居——智能提示音(云市场)

经过前面几节的介绍和实际操作,大家对阿里云的平台和阿里云入门套件也有一定的熟悉了。这节就来认识一下云市场,并购买我们所需要的产品,然后连结到阿里云入门套件,看看会产生什么样的效果。本节我们需要在云市场中购买墨迹天气这个服务,通过墨迹天气,我们可以获得当前的天气情况和天气预报,当下雨或者是烈日,墨迹天气通过阿里云平台上报到我们的主控板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();
}
}将这部分内容改为自己的环境和设备 下载编译。执行程序。现在你可以测试在你的环境下,能不能通过阿里云平台获取温度,并提示到我们。

DFHkDpTTc1I 发表于 2020-1-30 22:42:08

服务开发时,部署不成功,提示“只允许一个编排流”,怎么解决?

小LZY 发表于 2020-5-6 16:51:49

配置墨迹天气的编码和参数的图片是错的,能重新上传一下嘛?

反贪 发表于 2022-4-19 17:00:20

这是什么问题啊楼主大人

反贪 发表于 2022-4-19 17:01:57

反贪 发表于 2022-4-19 17:00
这是什么问题啊楼主大人

我这都是按照你的步骤做的,但是结果却是这样的
页: [1]
查看完整版本: 智能家居——智能提示音(云市场)