实验所需要硬件及软件如下:

实验所需要硬件

序号

名称

数量

备注

1

电脑

1台

系统Windows7及以上

2

STM32底座

2个

3

WiFi模块

1个

4

LED模块

1个

5

ST_LINK下载器

1个

6

ST_LINK下载器连接线

1根

7

OneNET平台显示PM2.5实验

1份

实验所需软件

STM32底座

STM32底座

WiFi模块

WiFi模块

LED模块

LED模块

ST-Link下载器 & ST-Link下载器连接线

STLink下载器

WIFI技术基本概念

AP模式和SP模式对照表

分类

AP模式

SP模式

接入网络

接受

不接受

网卡

需要

不需要

终端

有线

无线

WiFi模块原理图

WiFi模块原理图

RS485总线标准

实验底座RS485总线原理

① 在geogle浏览器输入网址:https://iiot.stepiot.com 打开网站。

② 输入帐号,登陆网站。

③ 点开事务管理->开放API。

④ 点击查看按钮,查看到token,将token复制。

⑤ 将WiFi模块、LED模块分别安装在STM32底座上,确认各个节点,如下图所示,ST_LINK连接WIFI节点连接。

⑥ 打开 Keil 5 (即安装的MDK5)工程软件,点击工具栏: Project -> Open Project,选择工程文件:控制智慧教室\ConnectBC\WIFI-V11\USER\WiFi.uvprojx并打开,如下图,双击启动工程。

⑦ 打开http_utils.h,填写token并保存。

⑧ 打WIFI.h,修改WIFI热点的名字与密码,修改后保存。

⑨ 编译工程,然后将程序下载到WIFI节点的底座。

⑩ 将STLink连接到按键节点,点击工具栏: Project -> Open Project,选择工程文件:控制智慧教室\ConnectBC\KEY\USER\LED.uvprojx并打开。

⑪ 编译工程,然后将程序下载到节点底座中,如下图。

⑫ LED节点与WIFI节点拼接,从STM32底座上取下STLink的USB线在重新接上,给设备重新上电。

⑬ 观察实验: 按键S1 控制灯,打开或者关闭; 按键S2 控制门锁,打开或者关闭; 按键S3 控制窗帘,闭合或者打开。

按键节点

① 程序目录结构,如下图。CORE文件夹为STM32内核代码,HALLIB文件文件夹为底层HAL库文件。我们主要关心,main.c及HARDWARE中的代码。

-w240

② main.c->main.c中初始化UCOSII、启动开始任务Start_Task()。

int main(void)
{ 
    uint8_t i = 0;

    OS_CPU_SysTickInit();
	OSInit();   
 	OSTaskCreate(Start_Task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务
	OSStart();	    
}

③ main.c-> Start_Task()中,中对串口、LED模块、RS485协议进行初始化。初始化完成后。创建按键扫描任务CC_Task()及485同步通信任务Sync_Task()。

void CC_Task(void *pdata)
{
    uint8_t temp;
    pdata = pdata;
    while(1)
    {
        OSTimeDly(1);
        temp = LedMod_KeyPoll(); 
        if((kv==0)&&(temp)){
            kv = temp;        
        }        
    }
}
void Sync_Task(void *pdata)
{
    INT8U err,i;
    pdata = pdata;
    while(1)
    {
        OSSemPend(&SemRecvSync,0,&err);    
        if(RSLIP.flg == 1)
        {
            RSLIP.flg = 0;  
            printf("get req1\r\n");
            if((kv)&&(RSLIP.cid == CID_POLL)&&(RSLIP.rid == LocalDeviceId))
            {
                printf("get req2\r\n");
                Rs485_Send(LocalDeviceId,WIFI_ID,CID_KEY,1,&kv);
                kv = 0;
            }
        }        
    }
}

WIFI节点

① 程序目录结构。如下图。CORE文件夹为STM32内核代码,HALLIB文件文件夹为底层HAL库文件。我们主要关心,main.c、http_utils.c及HARDWARE中的代码。

-w235

② main.c->main(),初始化UCOSII系统,启动开始任务Start_Task()。

int main(void)
{
  OS_CPU_SysTickInit();
	OSInit();   
 	OSTaskCreate(Start_Task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务
	OSStart();	
}

main.c->Start_Task()任务中,初始化串口、WIFI模块(连接平台)、slip协议,并启动Sync_Task任务。

void Start_Task(void *pdata)
{
    UART1_Init(115200);//初始化串口1
    UART2_Init(115200);//初始化串口2
    UART3_Init(115200);
    printf("this usart3 printf\r\n");
    Rs485_Init();
    TIM3_Init(1000-1,64-1);//初始化定时器3
    slip_init(&RSLIP);
         
    SemRecvSync = *OSSemCreate (0);
    
    OSTaskCreate(Sync_Task,(void *)0,(OS_STK *)&SYNC_TASK_STK[SYNC_STK_SIZE-1],SYNC_TASK_PRIO);//创建起始任务
    OSTaskCreate(CC_Task,(void *)0,(OS_STK *)&CC_TASK_STK[CC_STK_SIZE-1],CC_TASK_PRIO);//创建起始任务  
    OSTaskDel(START_TASK_PRIO);    
}

main.c->Sync_Task任务,定时请求按键,并依据按键值控制灯、门锁及窗帘。

if((++Count100Hz)>=100)
{
    Count100Hz = 0;
    Rs485_Send(LocalDeviceId,KEY_ID,CID_POLL,0,(void*)0);  
}
if(RSLIP.data[0] == 0x01)
{
    LinghtState = 1 - LinghtState;
    if(LinghtState){
        HTTP_SendCommand("turnOnLight"); 
    }
    else if(LinghtState == 0){
        HTTP_SendCommand("turnOffLight");                   
    }
}
else if(RSLIP.data[0] == 0x02)
    {
        LockState = 1 - LockState;
        if(LockState){
            HTTP_SendCommand("openDoorLock"); 
        }
        else if(LockState == 0){
            HTTP_SendCommand("closeDoorLock");                   
        }
    }
    else if(RSLIP.data[0] == 0x03)
    {
        CurtainsState = 1 - CurtainsState;
        if(CurtainsState){
            HTTP_SendCommand("openCurtain"); 
        }
        else if(CurtainsState == 0){
            HTTP_SendCommand("closeCurtain");                   
        }
    }             
  1. 弹出警告窗口,不能下载程序。
    • 请确认STLink驱动、STM32F103C8的DFP包是否安装。
    • STLink仿真器是否正常接入。
  2. 下载代码后程序没观察到实验现象。
    • 请重新上电,或者按下底座上的复位按键。
    • 模块没有安装稳妥。
  3. 连接不了平台设备没有上线。
    • WIFI名字、WIFI密码、token是否有效正确。