收藏官网首页
查看: 77584|回复: 186

[资料] 从0开始玩转Gokit3 SOC(3)温湿度远程监控应用-数值量上报

 

321

主题

1054

帖子

4380

积分

论坛元老

Rank: 8Rank: 8

积分
4380
QQ
发表于 2017-1-4 19:08:52 | 显示全部楼层 |阅读模式
免费使用STM32、APP自动代码生成工具
本帖最后由 bigfanofloT 于 2017-1-4 19:12 编辑

本应用基于机智云gokit3 SOC硬件平台,演示了如何通过通过板载DHT11温湿度传感器感知温湿度,然后上报到云端,从而可在手机APP端监控的应用。
分为以下三步:
1.     机智云开发者中心创建产品;
2.     机智云开发者中心生成SOC方案工程;
3.     移植温湿度传感器DHT11驱动,编写用户应用;
视频:
首先在机智云开发者中心创建产品。

温湿度远程监控应用

温湿度远程监控应用

温湿度远程监控应用

温湿度远程监控应用

填写好产品信息后新建数据点,我们建立如下温、湿度数据点:

温湿度远程监控应用

温湿度远程监控应用
然后我们在开发向导里面,生成soc工程:

温湿度远程监控应用

温湿度远程监控应用

温湿度远程监控应用

温湿度远程监控应用
下载生成的工程,解压后,其目录如下:

温湿度远程监控应用

温湿度远程监控应用
各个文件作用如下:

温湿度远程监控应用

温湿度远程监控应用
生成的工程包含了基本的框架,需要用户自己添加驱动和应用逻辑,本例来说就是温湿度传感器DHT11的底层驱动和应用,生成的工程文件夹名太长,为了方便改为soc_esp8266_HumTemp。
这里,我们从机智云官网下载Gokit3 SOC微信宠物屋源码,把里面的关于底板RGB5050 全彩LED的驱动文件hal_rgb_led.hhal_rgb_led.c文件以及传感器DHT11的驱动文件hal_temp_hum.c和hal_temp_hum.h拷贝到我们的工程中来。
下载源码:

http://dev.gizwits.com/zh-cn/developer/resource/hardware?type=GoKit

温湿度远程监控应用

温湿度远程监控应用
解压后找到如下4个LED和温湿度传感器的驱动c和h文件:

温湿度远程监控应用

温湿度远程监控应用

温湿度远程监控应用

温湿度远程监控应用
把它们拷贝到生成的工程里面对应位置:

温湿度远程监控应用

温湿度远程监控应用

温湿度远程监控应用

温湿度远程监控应用
接下来就是修改生成的工程源码了,我这里使用Subelime Text文本编辑器修改;

找到..\app\user目录的主函数user_main.c文件,首先添加2个驱动头文件路劲:

温湿度远程监控应用

温湿度远程监控应用
把传感器和RGB LED初始化函数放到voidICACHE_FLASH_ATTR user_init(void)里面:

温湿度远程监控应用

温湿度远程监控应用
在按键回调函数里面添加如下代码,是为了适应测试APP的提示;

温湿度远程监控应用

温湿度远程监控应用
在这里添加1个宏定义,用于控制定时采集温湿度;

温湿度远程监控应用

温湿度远程监控应用
在如下函数里面添加用户代码:定时读取温湿度,然后上报到云端;

温湿度远程监控应用

温湿度远程监控应用
工程修改完毕后,按照教程
搭建开发环境、编译代码、烧录。
工程源码下载:
游客,如果您要查看本帖隐藏内容请回复
PDF教程:
游客,如果您要查看本帖隐藏内容请回复



1、机智云QQ群:G1群:104975951 G2群:491509598 G3群:287087942
机智云爱好者-APP开发群: 599735135
QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、机智云微信公众号: 机智云 gizwits、 机智云智能宠物屋go-iot
关注机智云Gizwits官方公众号随时掌握最新资讯和活动信息

3

主题

11

帖子

255

积分

中级会员

Rank: 3Rank: 3

积分
255
发表于 2017-10-9 03:31:36 | 显示全部楼层
bigfanofloT 发表于 2017-10-1 17:13
把你的发上来看看

这个就是系统自动生成的新代码,未按照该贴编辑前可以编译,按照该贴修改以后报错无法编译,谢谢。

/**
****************************************
* @file         user_main.c
* @brief        The program entry file
* @author       Gizwits
* @date         2017-07-19
* @version      V03030000
* @copyright    Gizwits
*
* @note         机智云.只为智能硬件而生
*               Gizwits Smart Cloud  for Smart Products
*               链接|增值ֵ|开放|中立|安全|自有|自由|生态
*               www.gizwits.com
*
****************************************/
#include "ets_sys.h"
#include "osapi.h"
#include "user_interface.h"
#include "gagent_soc.h"
#include "user_devicefind.h"
#include "user_webserver.h"
#include "gizwits_product.h"
#include "driver/hal_key.h"
#if ESP_PLATFORM
#include "user_esp_platform.h"
#endif

#ifdef SERVER_SSL_ENABLE
#include "ssl/cert.h"
#include "ssl/private_key.h"
#else
#ifdef CLIENT_SSL_ENABLE
unsigned char *default_certificate;
unsigned int default_certificate_len = 0;
unsigned char *default_private_key;
unsigned int default_private_key_len = 0;
#endif
#endif

/**@name User timers related parameters
* @{
*/
#define USER_TIME_MS 1000                                                   ///< Timing time in milliseconds
LOCAL os_timer_t userTimer;                                                 ///< User timer structure
/**@} */

/**@name Key related definitions
* @{
*/
#define GPIO_KEY_NUM                            2                           ///< Defines the total number of key members
#define KEY_0_IO_MUX                            PERIPHS_IO_MUX_GPIO0_U      ///< ESP8266 GPIO function
#define KEY_0_IO_NUM                            0                           ///< ESP8266 GPIO number
#define KEY_0_IO_FUNC                           FUNC_GPIO0                  ///< ESP8266 GPIO name
#define KEY_1_IO_MUX                            PERIPHS_IO_MUX_MTMS_U       ///< ESP8266 GPIO function
#define KEY_1_IO_NUM                            14                          ///< ESP8266 GPIO number
#define KEY_1_IO_FUNC                           FUNC_GPIO14                 ///< ESP8266 GPIO name
LOCAL key_typedef_t * singleKey[GPIO_KEY_NUM];                              ///< Defines a single key member array pointer
LOCAL keys_typedef_t keys;                                                  ///< Defines the overall key module structure pointer   
/**@} */

/**
* Key1 key short press processing
* @param none
* @return none
*/
LOCAL void ICACHE_FLASH_ATTR key1ShortPress(void)
{
    GIZWITS_LOG("#### KEY1 short press ,Production Mode\n");
   
    gizwitsSetMode(WIFI_PRODUCTION_TEST);
}

/**
* Key1 key presses a long press
* @param none
* @return none
*/
LOCAL void ICACHE_FLASH_ATTR key1LongPress(void)
{
    GIZWITS_LOG("#### key1 long press, default setup\n");
   
    gizwitsSetMode(WIFI_RESET_MODE);
}

/**
* Key2 key to short press processing
* @param none
* @return none
*/
LOCAL void ICACHE_FLASH_ATTR key2ShortPress(void)
{
    GIZWITS_LOG("#### key2 short press, soft ap mode \n");

    gizwitsSetMode(WIFI_SOFTAP_MODE);
}

/**
* Key2 button long press
* @param none
* @return none
*/
LOCAL void ICACHE_FLASH_ATTR key2LongPress(void)
{
    GIZWITS_LOG("#### key2 long press, airlink mode\n");
   
    gizwitsSetMode(WIFI_AIRLINK_MODE);
}

/**
* Key to initialize
* @param none
* @return none
*/
LOCAL void ICACHE_FLASH_ATTR keyInit(void)
{
    singleKey[0] = keyInitOne(KEY_0_IO_NUM, KEY_0_IO_MUX, KEY_0_IO_FUNC,
                                key1LongPress, key1ShortPress);
    singleKey[1] = keyInitOne(KEY_1_IO_NUM, KEY_1_IO_MUX, KEY_1_IO_FUNC,
                                key2LongPress, key2ShortPress);
    keys.singleKey = singleKey;
    keyParaInit(&keys);
}

/**
* @brief user_rf_cal_sector_set

* Use the 636 sector (2544k ~ 2548k) in flash to store the RF_CAL parameter
* @param none
* @return none
*/
uint32_t ICACHE_FLASH_ATTR user_rf_cal_sector_set()
{
    return 636;
}

/**
* @brief program entry function

* In the function to complete the user-related initialization
* @param none
* @return none
*/
void ICACHE_FLASH_ATTR user_init(void)
{
    uint32_t system_free_size = 0;

    wifi_station_set_auto_connect(1);
    wifi_set_sleep_type(NONE_SLEEP_T);//set none sleep mode
    espconn_tcp_set_max_con(10);
    uart_init_3(9600,115200);
    UART_SetPrintPort(1);
    GIZWITS_LOG( "---------------SDK version:%s--------------\n", system_get_sdk_version());
    GIZWITS_LOG( "system_get_free_heap_size=%d\n",system_get_free_heap_size());

    struct rst_info *rtc_info = system_get_rst_info();
    GIZWITS_LOG( "reset reason: %x\n", rtc_info->reason);
    if (rtc_info->reason == REASON_WDT_RST ||
        rtc_info->reason == REASON_EXCEPTION_RST ||
        rtc_info->reason == REASON_SOFT_WDT_RST)
    {
        if (rtc_info->reason == REASON_EXCEPTION_RST)
        {
            GIZWITS_LOG("Fatal exception (%d):\n", rtc_info->exccause);
        }
        GIZWITS_LOG( "epc1=0x%08x, epc2=0x%08x, epc3=0x%08x, excvaddr=0x%08x, depc=0x%08x\n",
                rtc_info->epc1, rtc_info->epc2, rtc_info->epc3, rtc_info->excvaddr, rtc_info->depc);
    }

    if (system_upgrade_userbin_check() == UPGRADE_FW_BIN1)
    {
        GIZWITS_LOG( "---UPGRADE_FW_BIN1---\n");
    }
    else if (system_upgrade_userbin_check() == UPGRADE_FW_BIN2)
    {
        GIZWITS_LOG( "---UPGRADE_FW_BIN2---\n");
    }

    keyInit();
   
    userInit();

    gizwitsInit();  

    //user timer
    os_timer_disarm(&userTimer);
    os_timer_setfn(&userTimer, (os_timer_func_t *)userHandle, NULL);
    os_timer_arm(&userTimer, USER_TIME_MS, 1);

    GIZWITS_LOG("--- system_free_size = %d ---\n", system_get_free_heap_size());
}

3

主题

11

帖子

255

积分

中级会员

Rank: 3Rank: 3

积分
255
发表于 2017-10-9 03:35:51 | 显示全部楼层
bigfanofloT 发表于 2017-10-1 17:13
把你的发上来看看

gen_misc.sh version 20150511

boot mode: new
app:1
spi speed: 40 MHz
spi mode: QIO
spi_size_map:6
make[1]: Entering directory '/home/cobetckoe/workspace/logive/app/user'
DEPEND: xtensa-lx106-elf-gcc -M -Os -g -Wpointer-arith -Wundef -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections -DICACHE_FLASH -I include -I ./ -I ../../include/ets -I ../include -I ../../include -I ../../include/eagle -I ../..//app/gagent/inc -I ../..//app/Gizwits -I ../..//app/Utils user_json.c
/bin/sh: 2: cannot create .output/eagle/debug/obj/user_json.d.26294: Permission denied
DEPEND: xtensa-lx106-elf-gcc -M -Os -g -Wpointer-arith -Wundef -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections -DICACHE_FLASH -I include -I ./ -I ../../include/ets -I ../include -I ../../include -I ../../include/eagle -I ../..//app/gagent/inc -I ../..//app/Gizwits -I ../..//app/Utils user_main.c
/bin/sh: 2: cannot create .output/eagle/debug/obj/user_main.d.26299: Permission denied
xtensa-lx106-elf-gcc -Os -g -Wpointer-arith -Wundef -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections   -DICACHE_FLASH   -I include -I ./ -I ../../include/ets -I ../include  -I ../../include -I ../../include/eagle -I ../..//app/gagent/inc -I ../..//app/Gizwits -I ../..//app/Utils  -o .output/eagle/debug/obj/user_main.o -c user_main.c
user_main.c: In function 'user_rf_cal_sector_set':
user_main.c:152:30: error: 'dataPoint_t' has no member named 'valuetemp'
              currentDataPoint.valuetemp = curTemperature;
                              ^
user_main.c:153:30: error: 'dataPoint_t' has no member named 'valuehum'
              currentDataPoint.valuehum = curHumidity;
                              ^
../../Makefile:321: recipe for target '.output/eagle/debug/obj/user_main.o' failed
make[1]: ** [.output/eagle/debug/obj/user_main.o] Error 1
make[1]: Leaving directory '/home/cobetckoe/workspace/logive/app/user'
../Makefile:307: recipe for target '.subdirs' failed
make: ** [.subdirs] Error 2

3

主题

23

帖子

248

积分

中级会员

Rank: 3Rank: 3

积分
248
发表于 2017-2-16 22:02:51 | 显示全部楼层
在APP上,temp 和hum的数据 偶尔出现一次,为什么呢?
这里我是这么改的:
#define USER_TIME_MS     100  
//#define USER_TIME_MS 1000                                                    ///< 定时时间,单位:毫秒
LOCAL os_timer_t userTimer;  ///< 用户定时器结构体
#define TH_TIMEOUT       (1000/USER_TIME_MS)
/**@} */

点评

有截图么  详情 回复 发表于 2017-2-17 14:44

0

主题

3

帖子

79

积分

注册会员

Rank: 2

积分
79
发表于 2017-1-4 20:31:28 | 显示全部楼层
教您5分钟接入机智云,实现傻瓜式开发
好文,支持下

0

主题

12

帖子

264

积分

中级会员

Rank: 3Rank: 3

积分
264
发表于 2017-1-4 21:11:54 | 显示全部楼层
非常不错,收藏

3

主题

36

帖子

751

积分

高级会员

Rank: 4

积分
751
发表于 2017-1-5 14:12:18 | 显示全部楼层
过来看看,支持一下!!!

3

主题

36

帖子

751

积分

高级会员

Rank: 4

积分
751
发表于 2017-1-5 14:12:47 | 显示全部楼层
免费使用STM32、APP自动代码生成工具
:):):),好赞!!!

0

主题

1

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2017-1-6 08:54:28 | 显示全部楼层
看看,谢谢分享

2

主题

16

帖子

269

积分

中级会员

Rank: 3Rank: 3

积分
269
发表于 2017-1-6 11:37:56 | 显示全部楼层
你好,为什么我烧录了之后重启ESP8266,串口显示乱码,有一句不是乱码的,显示是don't use rtc mem data

点评

你的是Gokit3 SOC吗  详情 回复 发表于 2017-1-6 13:28

321

主题

1054

帖子

4380

积分

论坛元老

Rank: 8Rank: 8

积分
4380
QQ
 楼主| 发表于 2017-1-6 13:28:17 | 显示全部楼层
汉枫LPB120模块
nivYan 发表于 2017-1-6 11:37
你好,为什么我烧录了之后重启ESP8266,串口显示乱码,有一句不是乱码的,显示是don't use rtc mem data ...

你的是Gokit3 SOC吗

点评

不是,我申请的板子还没有发过来。现在使用的是ESP8266-12F的电路,电路和Gokit3 中ESP8266转接板原理图电路一样的,烧录乐鑫原厂的程序可以正常使用,现在烧录官方微信宠物屋SOC那个程序显示乱码,有时是直接不断重  详情 回复 发表于 2017-1-6 13:53
1、机智云QQ群:G1群:104975951 G2群:491509598 G3群:287087942
机智云爱好者-APP开发群: 599735135
QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、机智云微信公众号: 机智云 gizwits、 机智云智能宠物屋go-iot
关注机智云Gizwits官方公众号随时掌握最新资讯和活动信息

2

主题

16

帖子

269

积分

中级会员

Rank: 3Rank: 3

积分
269
发表于 2017-1-6 13:53:35 | 显示全部楼层

不是,我申请的板子还没有发过来。现在使用的是ESP8266-12F的电路,电路和Gokit3 中ESP8266转接板原理图电路一样的,烧录乐鑫原厂的程序可以正常使用,现在烧录官方微信宠物屋SOC那个程序显示乱码,有时是直接不断重启,请问要怎么解决呢?

点评

官方微信宠物屋源码要自己加PK码  详情 回复 发表于 2017-1-6 13:57

321

主题

1054

帖子

4380

积分

论坛元老

Rank: 8Rank: 8

积分
4380
QQ
 楼主| 发表于 2017-1-6 13:57:39 | 显示全部楼层
nivYan 发表于 2017-1-6 13:53
不是,我申请的板子还没有发过来。现在使用的是ESP8266-12F的电路,电路和Gokit3 中ESP8266转接板原理图 ...

官方微信宠物屋源码要自己加PK码

点评

不是pk码的问题,原来是串口接错的问题~~~回去仔细看了功能板的原理图才发现你们用的是ESP8266的UART1_TX引脚作为电脑串口!! 就是功能板上的UART0_TX和UART0_RX接的是ESP8266的UART-TX,而不是UART0_RX、UART0_T  详情 回复 发表于 2017-1-6 14:56
1、机智云QQ群:G1群:104975951 G2群:491509598 G3群:287087942
机智云爱好者-APP开发群: 599735135
QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、机智云微信公众号: 机智云 gizwits、 机智云智能宠物屋go-iot
关注机智云Gizwits官方公众号随时掌握最新资讯和活动信息

2

主题

16

帖子

269

积分

中级会员

Rank: 3Rank: 3

积分
269
发表于 2017-1-6 14:56:13 | 显示全部楼层
bigfanofloT 发表于 2017-1-6 13:57
官方微信宠物屋源码要自己加PK码

不是pk码的问题,原来是串口接错的问题~~~回去仔细看了功能板的原理图才发现你们用的是ESP8266的UART1_TX引脚作为电脑串口!!    就是功能板上的UART0_TX和UART0_RX接的是ESP8266的UART-TX,而不是UART0_RX、UART0_TX,这神标注啊~~好想和你们的工程师聊聊人生。。好吧,终于解决了,谢谢啊

0

主题

12

帖子

264

积分

中级会员

Rank: 3Rank: 3

积分
264
发表于 2017-1-7 12:22:22 | 显示全部楼层
谢谢分享,墙裂支持

0

主题

4

帖子

162

积分

注册会员

Rank: 2

积分
162
发表于 2017-1-8 23:27:59 | 显示全部楼层
免费使用STM32、APP自动代码生成工具
来学习了,关于soc的实在是太少了

3

主题

36

帖子

751

积分

高级会员

Rank: 4

积分
751
发表于 2017-1-9 11:49:02 | 显示全部楼层
这个帖子不错,看了下,自己利用手头的资源做了个插座,还是很不错的。后面考虑能不能烧录到esp8285中,如果行的话,那就更好了。

0

主题

14

帖子

344

积分

中级会员

Rank: 3Rank: 3

积分
344
发表于 2017-1-10 23:13:36 | 显示全部楼层
谢谢,想下来试试。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

© 2011-2017 Gizwits ( 粤ICP备11090211号 )

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