收藏官网首页
查看: 232500|回复: 169

[开源项目] 机智云宠物屋外加4路继电器开源教程

 
跳转到指定楼层
#
发表于 2019-3-28 17:54:26 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
校园创客福利
机智云宠物屋移植教程-MCU版本
1.硬件准备
(1)直接采用STM32底板的gokit套件
(2)采用散件自己搭建也行,散件清单以及和STM32单片机连线如下:
STM32核心板
P9813全彩灯模块----模块IIC接单片机PB8 PB9
L9110风扇模块----模块的2个控制引脚接单片机 PB4 PB5
微动开关2个----分别接单片机的PA8  PB10
红外光电反射传感器模块----接单片机PB7
DHT11温湿度传感器模块----接单片机PB3
4位继电器模块5V----接单片机PA1 PA4 PB0 PB1
esp8266最小系统,如果没有GAgent固件,需要下载固件,ESP8266串口烧写说明GAgent固件下载
ESP8266最小系统(烧录模式SW2闭合,也就是GPIO0拉低)
与STM32串口相连接,PA2(TX)----ESP8266(RX)   PA3(RX)---- ESP8266(TX)
如果需要其他的模块自行添加,到此硬件所需的配件以及接线说明就完成了

2.软件准备
(1)keil-ARM需要包含STM32F103的pack
(2)STM32CuBeMX
(3)ESP8266下载软件和STM32下载软件,度娘家自己去找

3.云端产品创建
右上角创建新产品
按照12345的选择后点击保存创建产品
点击去添加数据点
点击管理,选择产品数据点。
选择Gokit Demo(基于Gokit板载元器件的智能宠物屋)应用此模板
成功导入数据点之后我们还需要增加4个继电器的数据点,点击右上角新增数据点,按照如图所示分别创建标识名为Relay1,Relay2,Relay3,Relay4,可写,布尔值数据点
创建好了之后修改显示名称,此处我修改成继电器1 2 3 4,全部修改好之后,点击上面的应用保存数据点,到此数据点创建就完成了。
接下来我们需要生成MCU代码,先去产品基本信息里面复制Product Secret,然后进入MCU开发按照如图所示生成STM32F103C8代码包。
生成好了之后我们需要下载代码包到电脑上,到此云端所有准备工作就完成了。下载代码之后再下载一份机智云宠物屋MCU驱动代码备用,下载地址http://goms-1251025085.cosgz.myqcloud.com/GoKit_MCU_STM32_V03010101测试固件及开发资源2017121218-1513076127294.rar
3.代码修改
将下载好的2个代码包分别解压好,复制驱动代码文件到生成的代码包的Hal文件夹下,复制驱动文件夹下的STM32F103C8x.ioc到代码包下替换STM32F103C8x.ioc


复制STM32F103C8x.ioc过去后打开STM32F103C8x.ioc。初始化4个输出引脚,配置好之后code项目生成代码
生成好之后打开项目,找到gizwits_product.c文件,在用户函数gizwitsEventProcess里面对继电器控制进行修改,详细代码如下(直接复制可能会因为网页编码不一样导致乱码)
case EVENT_Relay1:
       currentDataPoint.valueRelay1 = dataPointPtr->valueRelay1;
        GIZWITS_LOG("Evt:EVENT_Relay1 %d \n", currentDataPoint.valueRelay1);
        if(0x01 ==currentDataPoint.valueRelay1)
        {
          HAL_GPIO_WritePin(Relay1_GPIO_Port, Relay1_Pin, GPIO_PIN_RESET);//继电器1,引脚拉低,继电器低电平有效
        }
        else
        {
         HAL_GPIO_WritePin(Relay1_GPIO_Port, Relay1_Pin, GPIO_PIN_SET);   
        }
        break;
      case EVENT_Relay2:
       currentDataPoint.valueRelay2 = dataPointPtr->valueRelay2;
        GIZWITS_LOG("Evt:EVENT_Relay2 %d \n", currentDataPoint.valueRelay2);
        if(0x01 == currentDataPoint.valueRelay2)
        {
          HAL_GPIO_WritePin(Relay2_GPIO_Port, Relay2_Pin, GPIO_PIN_RESET);
        }
        else
        {
          HAL_GPIO_WritePin(Relay2_GPIO_Port, Relay2_Pin, GPIO_PIN_SET);   
        }
        break;
      case EVENT_Relay3:
       currentDataPoint.valueRelay3 = dataPointPtr->valueRelay3;
        GIZWITS_LOG("Evt:EVENT_Relay3 %d \n", currentDataPoint.valueRelay3);
        if(0x01 ==currentDataPoint.valueRelay3)
        {
         HAL_GPIO_WritePin(Relay3_GPIO_Port, Relay3_Pin, GPIO_PIN_RESET);
        }
        else
        {
        HAL_GPIO_WritePin(Relay3_GPIO_Port, Relay3_Pin, GPIO_PIN_SET);   
        }
        break;
      case EVENT_Relay4:
       currentDataPoint.valueRelay4 = dataPointPtr->valueRelay4;
        GIZWITS_LOG("Evt:EVENT_Relay4 %d \n", currentDataPoint.valueRelay4);
        if(0x01 ==currentDataPoint.valueRelay4)
        {
         HAL_GPIO_WritePin(Relay4_GPIO_Port, Relay4_Pin, GPIO_PIN_RESET);
        }
        else
        {
         HAL_GPIO_WritePin(Relay4_GPIO_Port, Relay4_Pin, GPIO_PIN_SET);   
        }
        break;
在gizwits_product.c文件里面和main.c增加以下头文件
#include "hal_temp_hum.h"
#include "hal_rgb_led.h"
#include "hal_motor.h"
#include "Hal_infrared.h"
#include "delay.h"
#include "main.h"   //main.c已有就无需添加,将此头文件添加到各个sensor的文件当中,否则编译引脚报错
在gizwits_product.c文件的 userInit( ) 函数中添加各sensor的初始化
void userInit(void)
{
   memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));
   delay_init(72); // 延时 初始化
rgbLedInit(); // RGB LED 初始化
dht11Init(); // 温湿度初始化
irInit(); // 红外初始化
motorInit(); // 电机初始化
motorStatus(0); // 电机转速初始化
在gizwits_product.c 文件的 userHandle( ) 函数中添加只读型传感器
数据点相关的代码
void userHandle(void)
{
              uint8_t ret = 0;
              static uint32_tthLastTimer = 0;
              ///< 新添加代码: 红外传感器数据获取
              currentDataPoint.valueInfrared= irHandle();
              ///< 新添加代码: 温湿度传感器数据获取
              if((gizGetTimerCount()- thLastTimer) > 2000) //上报间隔2S
              {
                            ret= dht11Read((uint8_t *)¤tDataPoint.valueTemperature,(uint8_t*)¤tDataPoint.valueHumidity);
                            if(ret!= 0)
                            {
                                          GIZWITS_LOG("Failedto read DHT11 [%d] \n", ret);
                            }
                            thLastTimer= gizGetTimerCount();
              }
在main.c 文件的 key2ShortPress( ) 函数与 key2LongPress( ) 函数中添
加长/短按key2时的LED点亮代码。
void key2ShortPress(void)
{
GIZWITS_LOG("KEY2 PRESS ,Soft APmode\n");
#if !MODULE_TYPE
              gizwitsSetMode(WIFI_SOFTAP_MODE);
              #endif
              //Soft AP mode,RGB 红灯
              ledRgbControl(250,0, 0);
}
void key2LongPress(void)
{
            //AirLink mode
              GIZWITS_LOG("KEY2PRESS LONG ,AirLink mode\n");
#if !MODULE_TYPE
              gizwitsSetMode(WIFI_AIRLINK_MODE);
              #endif
              //AirLink mode,RGB 绿灯
              ledRgbControl(0,250, 0);
}
在gizwits_product.c文件的 gizwitsEventProcess( ) 函数中进行配网成功关闭灯
case WIFI_CON_ROUTER:
ledRgbControl(0, 250, 0);
    break;
接着继续在上面增加对RGB LED开启红色的控制。
        if(0x01 == currentDataPoint.valueLED_OnOff)
        {
          ledRgbControl(254,0, 0);
        }
        else
        {
          ledRgbControl(0, 0,0);
        }
        break;
接下来对其他颜色或者全彩已经电机等的修改
        switch(currentDataPoint.valueLED_Color)
        {
          caseLED_Color_VALUE0:
           ledRgbControl(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
            break;
          caseLED_Color_VALUE1:
            ledRgbControl(254, 254, 0);
            break;
          caseLED_Color_VALUE2:
            ledRgbControl(254,0, 70);
            break;
          caseLED_Color_VALUE3:
           ledRgbControl(238,30, 30);
            break;
          default:
            break;
        }
        break;

      case EVENT_LED_R:
       currentDataPoint.valueLED_R = dataPointPtr->valueLED_R;
       GIZWITS_LOG("Evt:EVENT_LED_R%d\n",currentDataPoint.valueLED_R);
        ledRgbControl(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
        break;
      case EVENT_LED_G:
       currentDataPoint.valueLED_G = dataPointPtr->valueLED_G;
       GIZWITS_LOG("Evt:EVENT_LED_G %d\n",currentDataPoint.valueLED_G);
       ledRgbControl(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
        break;
      case EVENT_LED_B:
       currentDataPoint.valueLED_B = dataPointPtr->valueLED_B;
       GIZWITS_LOG("Evt:EVENT_LED_B %d\n",currentDataPoint.valueLED_B);
       ledRgbControl(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
        break;
      case EVENT_Motor_Speed:
       currentDataPoint.valueMotor_Speed = dataPointPtr->valueMotor_Speed;
       GIZWITS_LOG("Evt:EVENT_Motor_Speed%d\n",currentDataPoint.valueMotor_Speed);
       motorStatus(currentDataPoint.valueMotor_Speed);
        break;
到此为止,所有的代码就修改结束了,将代码进行编译,下载到单片机,配网接入云就行了。
代码放在附件自行下载,有问题先自己思考,想不通再联系我电话15120205205(QQ和微信同电话号码)
所用到的固件由于论坛附件大小要求,已上传百度云。
游客,如果您要查看本帖隐藏内容请回复
机智云交流QQ群:378683984
发烧友
推荐
 楼主| 发表于 2021-3-15 20:36:32 | 只看该作者
acp 发表于 2020-12-17 11:11
创意不得了。【强】       如何实现远程呢?【2个不同的城市,远距离。。。】 ...

插座连上能上网的路由器,就能非局域网远程
发烧友

0

主题

1

帖子

54

积分

注册会员

Rank: 2

积分
54
推荐
发表于 2019-12-4 11:08:01 | 只看该作者
这个代码有直接用的列程吗  本人对那些修改代码感到不行 若有直接烧录代码就好了

0

主题

7

帖子

195

积分

注册会员

Rank: 2

积分
195
推荐
发表于 2020-12-17 11:11:11 | 只看该作者
创意不得了。【强】       如何实现远程呢?【2个不同的城市,远距离。。。】

点评

插座连上能上网的路由器,就能非局域网远程  详情 回复 发表于 2021-3-15 20:36

0

主题

1

帖子

7

积分

新手上路

Rank: 1

积分
7
164#
发表于 2024-10-17 20:46:56 | 只看该作者
注册成为机智云开发者,手机加虚拟设备快速开发
博主真厉害

0

主题

2

帖子

50

积分

注册会员

Rank: 2

积分
50
163#
发表于 2024-10-15 15:38:53 | 只看该作者
好好学习,天天向上

0

主题

2

帖子

28

积分

新手上路

Rank: 1

积分
28
161#
发表于 2024-10-10 04:59:05 | 只看该作者
不错值得学习

0

主题

6

帖子

268

积分

中级会员

Rank: 3Rank: 3

积分
268
159#
发表于 2024-7-11 09:02:25 | 只看该作者
注册成为机智云开发者,手机加虚拟设备快速开发
很好的教程,谢谢分享!

0

主题

10

帖子

96

积分

注册会员

Rank: 2

积分
96
158#
发表于 2024-4-21 16:14:22 | 只看该作者
机智云宠物屋外加4路继电器,学习了

0

主题

6

帖子

74

积分

注册会员

Rank: 2

积分
74
156#
发表于 2024-2-8 16:53:03 | 只看该作者
mark…………………………学习一下!

0

主题

17

帖子

222

积分

中级会员

Rank: 3Rank: 3

积分
222
155#
发表于 2024-1-6 10:58:04 | 只看该作者
好东西,值得收藏。

0

主题

2

帖子

69

积分

注册会员

Rank: 2

积分
69
154#
发表于 2023-12-25 11:31:43 | 只看该作者
汉枫LPB120模块
非常nice,帮助很大

0

主题

1

帖子

7

积分

新手上路

Rank: 1

积分
7
153#
发表于 2023-9-16 15:46:38 | 只看该作者
在哪了可以下载这个完整的工程呢  我移植以后的程序报错

0

主题

6

帖子

68

积分

注册会员

Rank: 2

积分
68
152#
发表于 2023-9-6 15:21:01 | 只看该作者
资源瞎子啊

0

主题

1

帖子

9

积分

新手上路

Rank: 1

积分
9
151#
发表于 2023-6-2 15:56:00 | 只看该作者
边看边学有益身心健康

4

主题

8

帖子

431

积分

中级会员

Rank: 3Rank: 3

积分
431
150#
发表于 2023-5-23 16:17:23 | 只看该作者
驱动代码看看先。。。。。。

0

主题

2

帖子

92

积分

注册会员

Rank: 2

积分
92
149#
发表于 2023-5-21 10:20:32 | 只看该作者
汉枫LPB120模块
非常好,值得学习

0

主题

7

帖子

400

积分

中级会员

Rank: 3Rank: 3

积分
400
148#
发表于 2023-4-17 09:29:40 | 只看该作者
不错,收藏学习

点评

绝对的好用,没有任何问题。  发表于 2024-1-8 17:26

0

主题

1

帖子

55

积分

注册会员

Rank: 2

积分
55
147#
发表于 2023-3-25 22:38:11 | 只看该作者
学习学习学习学习学习

0

主题

1

帖子

15

积分

新手上路

Rank: 1

积分
15
145#
发表于 2023-3-1 19:16:06 | 只看该作者
666666666666
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

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