首页 > 分享 > 机智云宠物屋外加4路继电器开源教程

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

机智云宠物屋移植教程-MCU版本

1.硬件准备

(2)采用散件自己搭建也行,散件清单以及和STM32单片机连线如下:

STM32核心板

P9813全彩灯模块----模块IIC接单片机PB8 PB9

L9110风扇模块----模块的2个控制引脚接单片机 PB4 PB5

微动开关2个----分别接单片机的PA8  PB10

红外光电反射传感器模块----接单片机PB7

DHT11温湿度传感器模块----接单片机PB3

4位继电器模块5V----接单片机PA1 PA4 PB0 PB1

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代码包。

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 APmoden");

#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 moden");

#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%dn",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 %dn",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 %dn",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%dn",currentDataPoint.valueMotor_Speed);

       motorStatus(currentDataPoint.valueMotor_Speed);

        break;

到此为止,所有的代码就修改结束了,将代码进行编译,下载到单片机,配网接入云就行了。

代码放在附件自行下载,有问题先自己思考,想不通再联系我电话15120205205(QQ和微信同电话号码)

所用到的固件由于论坛附件大小要求,已上传百度云。

游客,如果您要查看本帖隐藏内容请回复

相关知识

机智云宠物屋外加4路继电器开源教程
基于机智云+Shineblink的智能宠物屋
基于arduino和机智云平台的智能宠物屋设计
基于机智云+Shineblink的智能宠物屋,智能投喂、自动清洁及APP远程控制
IOT毕设|智能宠物屋研究与实现
开发者案例:智能宠物屋,智能投喂、自动清洁、APP远程控制
研读 宠物屋GOKIT2 (arduino)
开源h5游戏 宠物
极云鼠键转换器使用教程
2023XuperCore开源区块链创新赛

网址: 机智云宠物屋外加4路继电器开源教程 https://m.mcbbbk.com/newsview269447.html

所属分类:萌宠日常
上一篇: 根据参加赛事情况选择合适的鸽子配
下一篇: 参加公棚赛事,选择什么样的幼鸽?