3分钟教你创建手机APP远程温度监控应用,图形化编程!
本帖最后由 bigfanofloT 于 2016-9-23 17:22 编辑版权所有,转载请注明出处http://club.gizwits.com/home.php?mod=space&uid=7261对,你没有看错!!!3分钟教你创建手机APP远程温度监控应用,图形化编程,自动代码生成,麻麻再也不用担心我不会编程了,纯傻瓜式开发方式!机智云,物联网智能硬件平台领导者,重新定义智能设备开发!下面基于机智云Gokit V2.1硬件平台,教你如何把温湿度传感器数值通过单片机上报到云端,然后在自动生成的安卓手机APP上显示。请看组图(后面附源码和PDF版教程下载):首先登陆机智云开发者中心:http://dev.gizwits.com/zh-cn/developer/product/创建新产品。
添加数据点。
然后在MCU开发里面,下载生成的Keil MDK工程,使用Keil软件打开。这里,我们从机智云官网下载Gokit V2.1 STM32底板 微信宠物屋源码,把里面的关于延时文件、RGBLED驱动文件和温湿度传感器驱动文件拷贝到我们的工程中来,并添加好文件和编译路劲。
后面附件会给出这几个驱动文件的官网和本地下载方式。这里我们需要定义2个全局变量来保存读取的温湿度数值。
用户初始化函数,把用户驱动的初始化添加到这里。
用户数据处理接口,把温湿度的读取放到这里,并且填充数据结构以达到上报目的。这里注意的是延时函数的合理调用,不可上报过快。
我们在按键处理这里添加两个指示,因为生成的测试手机APP在配置入网时会有提示,这个不是必须的。如何触发配置入网模式?采用什么模式完全由用户代码决定,这里是为了配合测试用APP的提示。
下面是主函数,完全不需要用户修改。
MCU工程弄好后,编译并下载,这里不再赘述。然后我们插上USB线连接电脑,打开串口调试助手可以看到调试信息;到开发者中心下载测试APP,这里不再赘述,不清楚的请参考前期教程:http://club.gizwits.com/thread-3546-1-1.html下面给出关键步骤调试信息。一切就绪后,长按KEY2 2S进行配置连接路由器,我们使用的触发配置入网方式为长按KEY2,AirLink方式,当然用户可以自定义触发方式和配置方式。这里给出演示视频:http://v.youku.com/v_show/id_XMTcyOTIxNzIzNg==.html?oldhttp://player.youku.com/player.php/sid/XMTcyOTIxNzIzNg==/v.swf超级简单有木有,so奔走相告吧!附件:1.STM32底板,Gokit V2.1 微信宠物屋源码官方下载:**** Hidden Message *****这个工程里面包含了Gokit上面外设的驱动文件。2.STM32底板 Gokit V2.1,外设驱动打包下载:**** Hidden Message *****
3.本例程源码下载:**** Hidden Message *****4.PDF版教程下载:**** Hidden Message *****
bigfanofloT 发表于 2017-12-10 19:00
把你的代码发上来看看呗
int32_t uartWrite(uint8_t *buf, uint32_t len)
{
uint8_t crc = {0x55};
uint32_t i = 0;
uint8_t aa=0x55;
if(NULL == buf)
{
return -1;
}
for(i=0; i<len; i++)
{
// HAL_UART_Transmit_IT(&huart2, (uint8_t *)&buf, 1);
HAL_UART_Transmit(&huart2, (uint8_t *)&buf, 1,50);
// while (huart2.State != HAL_UART_STATE_READY);//Loop until the end of transmission
if(i >=2 && buf == 0xFF)
{
// HAL_UART_Transmit_IT(&huart2, (uint8_t *)&crc, 1);
HAL_UART_Transmit(&huart2, (uint8_t *)&buf, 1,50);
// while (huart2.State != HAL_UART_STATE_READY);//Loop until the end of transmission
}
}
#ifdef PROTOCOL_DEBUG
GIZWITS_LOG("MCU2WiFi[%4d:%4d]: ", gizGetTimerCount(), len);
for(i=0; i<len; i++)
{
GIZWITS_LOG("%02x ", buf);
if(i >=2 && buf == 0xFF)
{
GIZWITS_LOG("%02x ", 0x55);
}
}
GIZWITS_LOG("\n");
#endif
return len;
}
程序注掉的地方是中断发送的,这么写,程序运行有问题,按照你的换成轮询的就好了,而且咱们用CubeMx生成的hal_uart.h文件中的结构体UART_HandleTypeDef中是这样的
typedef struct
{
USART_TypeDef *Instance; /*!< UART registers base address */
UART_InitTypeDef Init; /*!< UART communication parameters */
uint8_t *pTxBuffPtr; /*!< Pointer to UART Tx transfer Buffer */
uint16_t TxXferSize; /*!< UART Tx Transfer size */
uint16_t TxXferCount; /*!< UART Tx Transfer Counter */
uint8_t *pRxBuffPtr; /*!< Pointer to UART Rx transfer Buffer */
uint16_t RxXferSize; /*!< UART Rx Transfer size */
uint16_t RxXferCount; /*!< UART Rx Transfer Counter */
DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA Handle parameters */
DMA_HandleTypeDef *hdmarx; /*!< UART Rx DMA Handle parameters */
HAL_LockTypeDef Lock; /*!< Locking object */
__IO HAL_UART_StateTypeDef State; /*!< UART communication state */
__IO uint32_t ErrorCode; /*!< UART Error code */
}UART_HandleTypeDef;
而官网生成的代码是这样的,我忘了是官网生成的还是你的一个教程里面的,是这样的typedef struct
{
USART_TypeDef *Instance; /*!< UART registers base address */
UART_InitTypeDef Init; /*!< UART communication parameters */
uint8_t *pTxBuffPtr; /*!< Pointer to UART Tx transfer Buffer */
uint16_t TxXferSize; /*!< UART Tx Transfer size */
__IO uint16_t TxXferCount; /*!< UART Tx Transfer Counter */
uint8_t *pRxBuffPtr; /*!< Pointer to UART Rx transfer Buffer */
uint16_t RxXferSize; /*!< UART Rx Transfer size */
__IO uint16_t RxXferCount; /*!< UART Rx Transfer Counter */
DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA Handle parameters */
DMA_HandleTypeDef *hdmarx; /*!< UART Rx DMA Handle parameters */
HAL_LockTypeDef Lock; /*!< Locking object */
__IO HAL_UART_StateTypeDef gState; /*!< UART state information related to global Handle management
and also related to Tx operations.
This parameter can be a value of @ref HAL_UART_StateTypeDef */
__IO HAL_UART_StateTypeDef RxState; /*!< UART state information related to Rx operations.
This parameter can be a value of @ref HAL_UART_StateTypeDef */
__IO uint32_t ErrorCode; /*!< UART Error code */
}UART_HandleTypeDef;
后面那部分不一样,不知道是不是这个原因导致的 bigfanofloT 发表于 2016-11-8 20:39
要另外买仿真器Jlink或者STlink
我刚用你教的“3分钟教你创建WIFI远程控制应用,图形化编程,自动代码生.”控制了一个LED,我想用这样的办法控制STM32F103C8T6的全部输出(都用做输出),能不能指导一二?版主!因为其他的温湿度采集,马达正反转都有现成的,就是没有全部引脚定义并控制的,盼版主回复,谢谢! tianzuoan 发表于 2016-11-8 20:48
我刚用你教的“3分钟教你创建WIFI远程控制应用,图形化编程,自动代码生.”控制了一个LED,我想用这样的 ...
控制LED的话,原理是相通的,都属于开关量下发控制,你要控制多少个就在云端创建多少个数据点,然后把硬件搭建好,在MCU端编写底层驱动就可以了,照着葫芦画瓢,推荐使用STM32CubeMX图形化配置。 我好久没上来 hxrong 发表于 2016-9-18 19:38
我好久没上来
嘿嘿,以后常来,机智云4.0超级简便 赞一个 好~~~~~~~~~~~~ 顶。。。。。。。。。。。。
系列教程,太棒了! 这么好的教程哪里找啊! 这都是硬件代码吗?没有微信版本的代码吗 是他是他 发表于 2016-9-19 09:47
这都是硬件代码吗?没有微信版本的代码吗
坐等后期教程 1112 发表于 2016-9-19 09:06
这么好的教程哪里找啊!
关注本论坛即可 谢谢LZ分享,新手学习~~ 下载 学习下载 学习下载 学习下载 学习下载 学习 :lol:lol:lol非常有用100个赞 :):):):):):) 定义的全局变量好像不能在其他地方使用,怎么处理? 1112 发表于 2016-9-21 12:50
定义的全局变量好像不能在其他地方使用,怎么处理?
截图看看,全局变量在另一个C文件使用到的话需要先用extern申明的,你看看编译器的提示 bigfanofloT 发表于 2016-9-21 13:06
截图看看,全局变量在另一个C文件使用到的话需要先用extern申明的,你看看编译器的提示 ...
谢谢!再请教一个问题:怎么通过adc 输入转化成温度呢?传感器用的是热敏电阻; 1112 发表于 2016-9-21 13:22
谢谢!再请教一个问题:怎么通过adc 输入转化成温度呢?传感器用的是热敏电阻; ...
看你用的模块,卖家会给出转换计算公式 请问可以在后台查看一段时间内采集的温湿度数据吗 只能通过手机实时看吗 学徒攻城师 发表于 2016-9-21 13:57
请问可以在后台查看一段时间内采集的温湿度数据吗 只能通过手机实时看吗
可以支持的