STM32
直播中

张燕

7年用户 1360经验值
私信 关注
[问答]

请问一下STM32是怎样接入机智云的

如何利用机智云进行物联网开发呢?
STM32是怎样接入机智云的?

回帖(2)

马知一

2021-12-15 10:26:01
为了叙述我后面做的物联网项目,同时方便大家学习利用机智云进行物联网开发,我觉得有必要把接入机智云的教程细致的描述一下。
硬件准备
开发板使用正点原子精英板,大家使用其他板也可以,STM32就行,即使是STM32F103c8t6也都可以:

WIFI模块使用ESP8266,我用的是正点原子的,大家用其他的8266也可以:

传感器我直接用精英板上带着的光敏传感器和两个LED灯吧。
第一步:ESP8266烧写机智云的官方固件,这样ESP8266才能与机智云进行通信
固件可以去机智云官网下载,也可以直接用我提供的压缩包里的固件,我的固件也是从官网下载的,后面我以我的固件进行讲解

  



  



  



  


GAgent文件下载解压后包含两个bin文件

  



  
ESP8266有两种,包括安信可12F版本和汇思锐12H版本。

这两个文件都是有包含GAgent的应用程序固件,唯一的区别就是(我们将固件GAgent_00ESP826_04020023_17032418为①,GAgent_00ESP826_04020023_17032418_combine为②进行指向,后面没做说明都是一样)下载①固件时需要同时配合3个固件一起,那3个固件呢?分别是boot、esp_init_data_default、blank(这3个固件在乐鑫官方固件烧写工具文件夹中可以找到,等下会有说明),总的来说就是下载4个固件,需设置4个固件地址,步骤上可能会比较繁琐,而且下载地址容易配置出错,而②的话是已经把4个固件打包成1个固件,这样方便我们的下载,但是下载时间会有点长,根据个人的情况选择①或②进行下载。

准备好GAgent固件后,那么就需要一个固件的下载工具。固件下载工具,我们用的是机智云官方推荐的乐鑫原厂固件烧写工具,在我提供的压缩包里也有


  




  




我们将工具打开,工具软件如图





  
固件的下载需要其硬件的支持,我们可以用精英板上的CH340模块,就是这一部分

它其实就相当于一个USB to TTL模块

只不过正点原子把他集成上去了,而且改进了,串口下载程序的时候不用拔BOOT0的跳线帽,当然给8266烧写固件用这个也可以。
1)先将板子上USART1的两个跳线帽给拔出,如图

2)将ATK-ESP8266模块与精英板子用杜邦线按照表进行连接


精英板ATK-ESP8266模块
5VVCC
GNDGND
TXDRXD
RXDTXD
GNDIO_0
注意:下载时IO_0引脚必须保持与GND的连接。这也是用USB To TTL模块的不好处,因为模块上只有一个GND。

固件和硬件连接都准备后,接下来我们就可以进行固件的烧写了。这里需注意一下,ATK-ESP8266 安信可12F版和汇思锐12H版在使用烧写固件前需修改下SPI的模式。修改方式如图。


  



  


下载时请根据所用板本而进行SPI模式选择,接下来我们将以安信可12F版本为例进行讲解。

打开刚刚解压出来的烧写工具,下载①固件(GAgent_00ESP826_04020023_17032418)按照图1所示设置下载,如果下载②固件(GAgent_00ESP826_04020023_17032418_combine)则按照图2所示设置进行下载。(注意:汇思锐12H版除了SPI MODE选项不一样,其他的都一样)
  



  
  



  
按照以上步骤设置后,点击“START”按钮




  
ESP8266内部将自动进行一次复位,复位成功后将会出现如下信息,表示模块正在进行烧写,如图





等待一段时间后,出现“FINISH”字样表示烧写成功,如图




  
烧写完成后,需将板子上USART1排针接口重新用跳线帽连接,连接关系:PA9(T)-RXD、PA10(R)-TXD,

烧写了Gagent固件后ESP8266模块上原来自带的AT指令功能会被覆盖,对此,我们不用担心,在正点原子的ATK-ESP8266 WIFI模块资料文件夹下->ESP8266相关资料->V1.3.0烧写及说明资料中,有教我们如何刷回AT固件,重新又变成我们熟悉的AT指令WIFI。

固件烧写完成之后我们把ESP8266与STM32进行连接,使用精英板直接插在ATK MODULE接口即可,使用其他板子的同学按照下表连接
ATK-ESP8266 WIFI模块连接关系图  [tr]ATK-ESP8266 WIFI 模块VCCGNDTXDRXDRSTIO_0[/tr]

精英板5VGNDPB11PB10PA4PA15
硬件部分就完成了
软件部分
我以一个远程读取光照强度和开关灯的例子讲解,我一边做一边写,硬件直接使用板子上带的LED和光敏传感器,光敏传感器代码可以在我之前的博客里找到。
首先登陆机智云官网点击开发者中心然后注册登陆

进来之后能看到之前做的项目,点击创建新产品


然后随便填一下,选择WIFI/移动解决方案,通信方式WIFI,传输方式定长,


然后点击添加新数据点

  




点击新建数据点





  


添加一个光照强度数据点,因为只远程监控,所以选择只读就可以,标识名必须英文,点击添加

  



  


读写类型有只读、可写、报警、故障。只读就是只远程监控数据,可写是可以远程操控,比如开关灯之类的操作,报警是数据点置1以后APP上会有报警提示

  



  


数据类型有布尔值、枚举、数值、扩展,常用的布尔值就只有0和1,数值可以按照你的欲求定义范围,这里光照强度是百分比形式,所以设置1-100

  



  


我们再新建一个远程控制LED开关的数据点,点击添加新数据点

  



  


开关只有两种状态,所以设置可写与布尔值,点击添加

  



  


最后别忘记点击应用,不然数据点就白定义了

  



  


然后我们下载官方的Demo APP进行虚拟设备测试和后面的实际设备测试

  



  


我用的是华为手机,所以下载Android的应用(其实就是穷),APP长下图这样

然后点击虚拟设备,启动虚拟设备

  



  


点击显示二维码并用Demo APP扫描

  



  


然后我们定义的数据点就出来了


到此为止一切正常,然后我们开始写程序,首先先让机智云自动生成数据点和设备接入等的代码,然后移植到工程当中,先到基本信息这把Product Secret复制下来,接下来要用

  



  


点击MCU开发,选择独立MCU方案,硬件平台选择其他平台,把刚才复制的Product Secret复制上,点击生成代码包

  



  


点击下载,并解压

  



  


压缩包内包含以下文件,我们只使用Gizwits和Utils两个文件夹,并复制

  



  


粘贴到光敏传感器工程下(代码可以去我之前的博客中下载),USMART文件夹没用,删了就行

  



  


在HARDWARE文件夹下粘贴我给的压缩包里的TIMER和USART3

  



  


把刚才添加的文件添加到工程里

  



  


接下来对gizwits_product.c和gizwits_protocol.h以及main.c进行小小的修改,同样使用我提供的压缩包里对应文件名的文件,按照我标的每一处要求,添加的就添加,删除的就删除,修改的就修改

//第一处,添加
#include "usart3.h"

//第八处,修改与添加
extern dataPoint_t currentDataPoint;
extern u8 wifi_sta;

int8_t gizwitsEventProcess(eventInfo_t *info, uint8_t *data, uint32_t len)
{
  uint8_t i = 0;
  dataPoint_t *dataPointPtr = (dataPoint_t *)data;
  moduleStatusInfo_t *wifiData = (moduleStatusInfo_t *)data;
  protocolTime_t *ptime = (protocolTime_t *)data;

  if((NULL == info) || (NULL == data))
  {
    return -1;
  }

  for(i=0; inum; i++)
  {
    switch(info->event)
    {




      case WIFI_SOFTAP:
        break;
      case WIFI_AIRLINK:
        break;
      case WIFI_STATION:
        break;
      case WIFI_CON_ROUTER:
        break;
      case WIFI_DISCON_ROUTER:
        break;
      case WIFI_CON_M2M: wifi_sta=1;//wifi设备已连接//第二处,添加
        break;
      case WIFI_DISCON_M2M: wifi_sta=0;//wifi设备断开//第三处,添加
        break;
      case WIFI_RSSI:
        GIZWITS_LOG("RSSI %dn", wifiData->rssi);
        break;
      case TRANSPARENT_DATA:
        GIZWITS_LOG("TRANSPARENT_DATA n");
        //user handle , Fetch data from [data] , size is [len]
        break;
      case WIFI_NTP:
        GIZWITS_LOG("WIFI_NTP : [%d-%d-%d %02d:%02d:%02d][%d] n",ptime->year,ptime->month,ptime->day,ptime->hour,ptime->minute,ptime->second,ptime->ntp);
        break;
      default:
        break;
    }
  }

  return 0;
}

//第七处,删除
void userHandle(void)
{
/*
    currentDataPoint.valueLight = ;//Add Sensor Data Collection
    */
   
}

//第四处,添加
void mcuRestart(void)
{
    __set_FAULTMASK(1);//关闭所有中断
    NVIC_SystemReset();//复位
}

int32_t uartWrite(uint8_t *buf, uint32_t len)
{
    uint32_t i = 0;
   
    if(NULL == buf)
    {
        return -1;
    }
   
    #ifdef PROTOCOL_DEBUG
    GIZWITS_LOG("MCU2WiFi[%4d:%4d]: ", gizGetTimerCount(), len);
    for(i=0; i     {
        GIZWITS_LOG("%02x ", buf);
    }
    GIZWITS_LOG("n");
    #endif

    for(i=0; i     {
        //USART_SendData(UART, buf);//STM32 test demo
        //Serial port to achieve the function, the buf sent to the module
                //第五处,添加
                USART_SendData(USART3,buf);
        while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕
        if(i >=2 && buf == 0xFF)
        {
          //Serial port to achieve the function, the 0x55 sent to the module
          //USART_SendData(UART, 0x55);//STM32 test demo
                  //第六处,添加
                  USART_SendData(USART3,0x55);
          while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕
        }
    }


   
    return len;
}

得到新的gizwits_product.c和gizwits_protocol.h以及main.c,代码太长就不一一粘贴了,定义的数据点在gizwits_protocol.h的200-300行之间一个叫做dataPoint_t的结构体中


typedef struct {
  bool valueLED;
  uint32_t valueLight;
} dataPoint_t;
最后修改的main.c如下


#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"         
#include "adc.h"
#include "lsens.h"
#include "timer.h"
#include "usart3.h"
#include "gizwits_product.h"
/************************************************  
ALIENTEK精英STM32开发板     
作者:唯恋殊雨   
CSDN博客:https://blog.csdn.net/tichimi3375   
OUT-PF8
************************************************/   
/* 用户区当前设备状态结构体*/
dataPoint_t currentDataPoint;

//WIFI连接状态
//wifi_sta 0: 断开
//         1: 已连接
u8 wifi_sta=0;

//协议初始化
void Gizwits_Init(void)
{       
        TIM3_Int_Init(9,7199);//1MS系统定时
    usart3_init(9600);//WIFI初始化
        memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));//设备状态结构体初始化
        gizwitsInit();//缓冲区初始化
}


int main(void)
{         
        u8 adcx;
        int key;
        u8 wifi_con=0;//记录wifi连接状态 1:连接 0:断开
        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
        LED_Init();                                  //初始化与LED连接的硬件接口
        Lsens_Init();                         //初始化光敏传感器   
        Gizwits_Init();         //协议初始化
        printf("--------机智云IOT-DHT11温湿度检测报警实验----------rn");
        printf("KEY1:AirLink连接模式t KEY_UP:复位rnrn");         
        while(1)
        {
                if(wifi_con!=wifi_sta)
                 {
                         wifi_con=wifi_sta;
                         wifi_con?printf("connect"):printf("close");
                 }
                 
                 
                adcx=Lsens_Get_Val();
                printf("光照强度为:%d",adcx);//显示ADC的值
                currentDataPoint.valueLight =  adcx;
                if(currentDataPoint.valueLED == 0x01)
                {
                                LED0 = 0;
                }else
                {
                                LED0 = 1;
                }
                 
               
                gizwitsHandle((dataPoint_t *)¤tDataPoint);//协议处理
               
                key = KEY_Scan(0);
                if(key==KEY1_PRES)//KEY1按键
                {
                        printf("WIFI进入AirLink连接模式rn");
                        gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link模式接入
                }                       
                if(key==WKUP_PRES)//KEY_UP按键
                {  
                        printf("WIFI复位,请重新配置连接rn");
                        gizwitsSetMode(WIFI_RESET_MODE);//WIFI复位
                        wifi_sta=0;//标志wifi已断开
                }
                delay_ms(200);
        }
}


非常容易理解,将程序下载到开发板,配置连接的时候先按开发板的KEY1键,然后Demo APP选择添加设备

  



  


看一下现象

  



  


这样就完成了,你会了吗
后面还会再更新一篇修改机智云APP开源代码的教程,方便大家完成从硬件到软件的完整物联网项目。
举报

李淑英

2021-12-15 10:27:25
为了叙述我后面做的物联网项目,同时方便大家学习利用机智云进行物联网开发,我觉得有必要把接入机智云的教程细致的描述一下。
硬件准备
开发板使用正点原子精英板,大家使用其他板也可以,STM32就行,即使是STM32F103c8t6也都可以:

WIFI模块使用ESP8266,我用的是正点原子的,大家用其他的8266也可以:

传感器我直接用精英板上带着的光敏传感器和两个LED灯吧。
第一步:ESP8266烧写机智云的官方固件,这样ESP8266才能与机智云进行通信
固件可以去机智云官网下载,也可以直接用我提供的压缩包里的固件,我的固件也是从官网下载的,后面我以我的固件进行讲解

  



  



  



  


GAgent文件下载解压后包含两个bin文件

  



  
ESP8266有两种,包括安信可12F版本和汇思锐12H版本。

这两个文件都是有包含GAgent的应用程序固件,唯一的区别就是(我们将固件GAgent_00ESP826_04020023_17032418为①,GAgent_00ESP826_04020023_17032418_combine为②进行指向,后面没做说明都是一样)下载①固件时需要同时配合3个固件一起,那3个固件呢?分别是boot、esp_init_data_default、blank(这3个固件在乐鑫官方固件烧写工具文件夹中可以找到,等下会有说明),总的来说就是下载4个固件,需设置4个固件地址,步骤上可能会比较繁琐,而且下载地址容易配置出错,而②的话是已经把4个固件打包成1个固件,这样方便我们的下载,但是下载时间会有点长,根据个人的情况选择①或②进行下载。

准备好GAgent固件后,那么就需要一个固件的下载工具。固件下载工具,我们用的是机智云官方推荐的乐鑫原厂固件烧写工具,在我提供的压缩包里也有


  




  




我们将工具打开,工具软件如图





  
固件的下载需要其硬件的支持,我们可以用精英板上的CH340模块,就是这一部分

它其实就相当于一个USB to TTL模块

只不过正点原子把他集成上去了,而且改进了,串口下载程序的时候不用拔BOOT0的跳线帽,当然给8266烧写固件用这个也可以。
1)先将板子上USART1的两个跳线帽给拔出,如图

2)将ATK-ESP8266模块与精英板子用杜邦线按照表进行连接


精英板ATK-ESP8266模块
5VVCC
GNDGND
TXDRXD
RXDTXD
GNDIO_0
注意:下载时IO_0引脚必须保持与GND的连接。这也是用USB To TTL模块的不好处,因为模块上只有一个GND。

固件和硬件连接都准备后,接下来我们就可以进行固件的烧写了。这里需注意一下,ATK-ESP8266 安信可12F版和汇思锐12H版在使用烧写固件前需修改下SPI的模式。修改方式如图。


  



  


下载时请根据所用板本而进行SPI模式选择,接下来我们将以安信可12F版本为例进行讲解。

打开刚刚解压出来的烧写工具,下载①固件(GAgent_00ESP826_04020023_17032418)按照图1所示设置下载,如果下载②固件(GAgent_00ESP826_04020023_17032418_combine)则按照图2所示设置进行下载。(注意:汇思锐12H版除了SPI MODE选项不一样,其他的都一样)
  



  
  



  
按照以上步骤设置后,点击“START”按钮




  
ESP8266内部将自动进行一次复位,复位成功后将会出现如下信息,表示模块正在进行烧写,如图





等待一段时间后,出现“FINISH”字样表示烧写成功,如图




  
烧写完成后,需将板子上USART1排针接口重新用跳线帽连接,连接关系:PA9(T)-RXD、PA10(R)-TXD,

烧写了Gagent固件后ESP8266模块上原来自带的AT指令功能会被覆盖,对此,我们不用担心,在正点原子的ATK-ESP8266 WIFI模块资料文件夹下->ESP8266相关资料->V1.3.0烧写及说明资料中,有教我们如何刷回AT固件,重新又变成我们熟悉的AT指令WIFI。

固件烧写完成之后我们把ESP8266与STM32进行连接,使用精英板直接插在ATK MODULE接口即可,使用其他板子的同学按照下表连接
ATK-ESP8266 WIFI模块连接关系图  [tr]ATK-ESP8266 WIFI 模块VCCGNDTXDRXDRSTIO_0[/tr]

精英板5VGNDPB11PB10PA4PA15
硬件部分就完成了
软件部分
我以一个远程读取光照强度和开关灯的例子讲解,我一边做一边写,硬件直接使用板子上带的LED和光敏传感器,光敏传感器代码可以在我之前的博客里找到。
首先登陆机智云官网点击开发者中心然后注册登陆

进来之后能看到之前做的项目,点击创建新产品


然后随便填一下,选择WIFI/移动解决方案,通信方式WIFI,传输方式定长,


然后点击添加新数据点

  




点击新建数据点





  


添加一个光照强度数据点,因为只远程监控,所以选择只读就可以,标识名必须英文,点击添加

  



  


读写类型有只读、可写、报警、故障。只读就是只远程监控数据,可写是可以远程操控,比如开关灯之类的操作,报警是数据点置1以后APP上会有报警提示

  



  


数据类型有布尔值、枚举、数值、扩展,常用的布尔值就只有0和1,数值可以按照你的欲求定义范围,这里光照强度是百分比形式,所以设置1-100

  



  


我们再新建一个远程控制LED开关的数据点,点击添加新数据点

  



  


开关只有两种状态,所以设置可写与布尔值,点击添加

  



  


最后别忘记点击应用,不然数据点就白定义了

  



  


然后我们下载官方的Demo APP进行虚拟设备测试和后面的实际设备测试

  



  


我用的是华为手机,所以下载Android的应用(其实就是穷),APP长下图这样

然后点击虚拟设备,启动虚拟设备

  



  


点击显示二维码并用Demo APP扫描

  



  


然后我们定义的数据点就出来了


到此为止一切正常,然后我们开始写程序,首先先让机智云自动生成数据点和设备接入等的代码,然后移植到工程当中,先到基本信息这把Product Secret复制下来,接下来要用

  



  


点击MCU开发,选择独立MCU方案,硬件平台选择其他平台,把刚才复制的Product Secret复制上,点击生成代码包

  



  


点击下载,并解压

  



  


压缩包内包含以下文件,我们只使用Gizwits和Utils两个文件夹,并复制

  



  


粘贴到光敏传感器工程下(代码可以去我之前的博客中下载),USMART文件夹没用,删了就行

  



  


在HARDWARE文件夹下粘贴我给的压缩包里的TIMER和USART3

  



  


把刚才添加的文件添加到工程里

  



  


接下来对gizwits_product.c和gizwits_protocol.h以及main.c进行小小的修改,同样使用我提供的压缩包里对应文件名的文件,按照我标的每一处要求,添加的就添加,删除的就删除,修改的就修改

//第一处,添加
#include "usart3.h"

//第八处,修改与添加
extern dataPoint_t currentDataPoint;
extern u8 wifi_sta;

int8_t gizwitsEventProcess(eventInfo_t *info, uint8_t *data, uint32_t len)
{
  uint8_t i = 0;
  dataPoint_t *dataPointPtr = (dataPoint_t *)data;
  moduleStatusInfo_t *wifiData = (moduleStatusInfo_t *)data;
  protocolTime_t *ptime = (protocolTime_t *)data;

  if((NULL == info) || (NULL == data))
  {
    return -1;
  }

  for(i=0; inum; i++)
  {
    switch(info->event)
    {




      case WIFI_SOFTAP:
        break;
      case WIFI_AIRLINK:
        break;
      case WIFI_STATION:
        break;
      case WIFI_CON_ROUTER:
        break;
      case WIFI_DISCON_ROUTER:
        break;
      case WIFI_CON_M2M: wifi_sta=1;//wifi设备已连接//第二处,添加
        break;
      case WIFI_DISCON_M2M: wifi_sta=0;//wifi设备断开//第三处,添加
        break;
      case WIFI_RSSI:
        GIZWITS_LOG("RSSI %dn", wifiData->rssi);
        break;
      case TRANSPARENT_DATA:
        GIZWITS_LOG("TRANSPARENT_DATA n");
        //user handle , Fetch data from [data] , size is [len]
        break;
      case WIFI_NTP:
        GIZWITS_LOG("WIFI_NTP : [%d-%d-%d %02d:%02d:%02d][%d] n",ptime->year,ptime->month,ptime->day,ptime->hour,ptime->minute,ptime->second,ptime->ntp);
        break;
      default:
        break;
    }
  }

  return 0;
}

//第七处,删除
void userHandle(void)
{
/*
    currentDataPoint.valueLight = ;//Add Sensor Data Collection
    */
   
}

//第四处,添加
void mcuRestart(void)
{
    __set_FAULTMASK(1);//关闭所有中断
    NVIC_SystemReset();//复位
}

int32_t uartWrite(uint8_t *buf, uint32_t len)
{
    uint32_t i = 0;
   
    if(NULL == buf)
    {
        return -1;
    }
   
    #ifdef PROTOCOL_DEBUG
    GIZWITS_LOG("MCU2WiFi[%4d:%4d]: ", gizGetTimerCount(), len);
    for(i=0; i     {
        GIZWITS_LOG("%02x ", buf);
    }
    GIZWITS_LOG("n");
    #endif

    for(i=0; i     {
        //USART_SendData(UART, buf);//STM32 test demo
        //Serial port to achieve the function, the buf sent to the module
                //第五处,添加
                USART_SendData(USART3,buf);
        while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕
        if(i >=2 && buf == 0xFF)
        {
          //Serial port to achieve the function, the 0x55 sent to the module
          //USART_SendData(UART, 0x55);//STM32 test demo
                  //第六处,添加
                  USART_SendData(USART3,0x55);
          while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕
        }
    }


   
    return len;
}

得到新的gizwits_product.c和gizwits_protocol.h以及main.c,代码太长就不一一粘贴了,定义的数据点在gizwits_protocol.h的200-300行之间一个叫做dataPoint_t的结构体中


typedef struct {
  bool valueLED;
  uint32_t valueLight;
} dataPoint_t;
最后修改的main.c如下


#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"         
#include "adc.h"
#include "lsens.h"
#include "timer.h"
#include "usart3.h"
#include "gizwits_product.h"
/************************************************  
ALIENTEK精英STM32开发板     
作者:唯恋殊雨   
CSDN博客:https://blog.csdn.net/tichimi3375   
OUT-PF8
************************************************/   
/* 用户区当前设备状态结构体*/
dataPoint_t currentDataPoint;

//WIFI连接状态
//wifi_sta 0: 断开
//         1: 已连接
u8 wifi_sta=0;

//协议初始化
void Gizwits_Init(void)
{       
        TIM3_Int_Init(9,7199);//1MS系统定时
    usart3_init(9600);//WIFI初始化
        memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));//设备状态结构体初始化
        gizwitsInit();//缓冲区初始化
}


int main(void)
{         
        u8 adcx;
        int key;
        u8 wifi_con=0;//记录wifi连接状态 1:连接 0:断开
        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
        LED_Init();                                  //初始化与LED连接的硬件接口
        Lsens_Init();                         //初始化光敏传感器   
        Gizwits_Init();         //协议初始化
        printf("--------机智云IOT-DHT11温湿度检测报警实验----------rn");
        printf("KEY1:AirLink连接模式t KEY_UP:复位rnrn");         
        while(1)
        {
                if(wifi_con!=wifi_sta)
                 {
                         wifi_con=wifi_sta;
                         wifi_con?printf("connect"):printf("close");
                 }
                 
                 
                adcx=Lsens_Get_Val();
                printf("光照强度为:%d",adcx);//显示ADC的值
                currentDataPoint.valueLight =  adcx;
                if(currentDataPoint.valueLED == 0x01)
                {
                                LED0 = 0;
                }else
                {
                                LED0 = 1;
                }
                 
               
                gizwitsHandle((dataPoint_t *)¤tDataPoint);//协议处理
               
                key = KEY_Scan(0);
                if(key==KEY1_PRES)//KEY1按键
                {
                        printf("WIFI进入AirLink连接模式rn");
                        gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link模式接入
                }                       
                if(key==WKUP_PRES)//KEY_UP按键
                {  
                        printf("WIFI复位,请重新配置连接rn");
                        gizwitsSetMode(WIFI_RESET_MODE);//WIFI复位
                        wifi_sta=0;//标志wifi已断开
                }
                delay_ms(200);
        }
}


非常容易理解,将程序下载到开发板,配置连接的时候先按开发板的KEY1键,然后Demo APP选择添加设备

  



  


看一下现象

  



  


这样就完成了,你会了吗
后面还会再更新一篇修改机智云APP开源代码的教程,方便大家完成从硬件到软件的完整物联网项目。
举报

更多回帖

×
20
完善资料,
赚取积分