智能城市(病房、寝室、园区)

#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "i2c.h"
#include "key.h"
#include "GUI.h"
#include "Lcd_Driver.h"
#include "Lcd_Api.h"
#include "ch422.h"
#include "sht20.h"

IIC_INFO iicInfo;
SHT20_INFO SHT20_Info;

unsigned char CH422_buf[16];    


void Hardware_Init(void)
{
    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        
    
    Delay_Init();                                                                            
    
    Usart1_Init(115200);    
     
    
    Lcd_Init();                                                                                    
    
    Lcd_Clear(WHITE);                                                                    
    
    IIC_Init();                                                                                    
    
    CH422_Init();                                                                                
    
}


 int main(void)
 {     
    
    Hardware_Init();                                                 

    Lcd_Clear_Area(WHITE,0,40,128,88);
    
    while(1)
    {
        
        switch(KeyScan()){
            case 1:
                Gui_DrawFont_GBK16(10,30,RED,WHITE,(u8 *) "  Mo.9 need help" );
             DelayXms(100);
            break;
            case 2:
                SHT20_GetValue();
            
            
            Gui_DrawFont_GBK16(10,30,RED,WHITE,(u8 *) "  温度:" );
            Gui_DrawFont_GBK16(10,48,RED,WHITE,(u8 *) "  湿度:" );
            
            
            SPILCD_DisString(50,30,16,BLUE,1,"%.1f C",SHT20_Info.temperature);
            SPILCD_DisString(50,48,16,BLUE,1,"%.1f %%RH",SHT20_Info.humidity);
            
            break;
        }
        
    
        DelayXms(100);
    }
 }
 

寝室

/**************************************************************

    *   文件名称:         main.c
    *
    *    作    者:         苏锋
    *
    *    日    期:         2018-8-8
    *
    *    说    明:         BH1750光强传感器实验主程序
    *
    *    修改记录:        
    
****************************************************************/

//单片机头文件
#include "stm32f10x.h"

//硬件驱动
#include "delay.h"
#include "usart.h"
#include "i2c.h"
#include "BH1750.h"
#include "GUI.h"
#include "Lcd_Driver.h"
#include "Lcd_Api.h"
#include "fan.h"
#include "ch422.h"
#include "beep.h"
#include "sht20.h"

//结构体声明
IIC_INFO iicInfo;
BH1750_INFO BH1750_Info;
FAN_INFO Fan_Info;
SHT20_INFO SHT20_Info;

//自定义变量
char Light_STA=0;
char Window_STA=0;

//定于语音变量
#define voiceMood 0x03


//定义16个数码管的映像缓存区
unsigned char CH422_buf[16];    

//机械按键变量
unsigned char i;
static u8 sta;


/*
************************************************************
*    函数名称:    Hardware_Init
*
*    函数功能:    硬件初始化
*
*    入口参数:    无
*
*    返回参数:    无
*
*    说明:        初始化单片机功能以及外接设备
************************************************************
*/
void Hardware_Init(void)
{
    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);            //中断控制器分组设置

    Delay_Init();                                                                                //Systick初始化,用于普通的延时
    
    Usart1_Init(115200);                                                                 //串口初始化为115200     
    
    Lcd_Init();                                                                                    //LCD初始化
    
    Lcd_Clear(WHITE);                                                                        //LCD清屏
    
    Fan_Init();                                                                                    //风扇初始化
    
    IIC_Init();                                                                                    //软件IIC总线初始化
    
    CH422_Init();                                                                                //机械按键初始化
    
    BH_init();                                                                                    //光照初始化
    
    Beep_Init();                                                                                //语音模块初始化
    
    
}

/*
************************************************************
*    函数名称:    SHT20Data
*
*    函数功能:    温湿度数据
*
*    入口参数:    无
*
*    返回参数:    无
*
*    说明:        初始化单片机功能以及外接设备
************************************************************
*/
void SHT20Data(void){
    SHT20_GetValue();
    if(SHT20_Info.humidity>80||SHT20_Info.temperature>30){
        Fan_Set(ON);
    }else{
        Fan_Set(OFF);
    }
}

/*
************************************************************
*    函数名称:    BHData
*
*    函数功能:    光照度数据
*
*    入口参数:    无
*
*    返回参数:    无
*
*    说明:        初始化单片机功能以及外接设备
************************************************************
*/
void BHData(void){
    Get_BH_Value();
    if(BH1750_Info.bh_data<100){
        Light_STA =1;
    }else{
        Light_STA =0;
    }
}


/*
************************************************************
*    函数名称:    BeepVoice
*
*    函数功能:    语音模块
*
*    入口参数:    无
*
*    返回参数:    无
*
*    说明:        初始化单片机功能以及外接设备
************************************************************
*/
void BeepVoice(void){
    Beep_Start();
    Beep_Transfer(voiceMood);
}

/*
************************************************************
*    函数名称:    CH422
*
*    函数功能:    触摸按键初始化
*
*    入口参数:    无
*
*    返回参数:    无
*
*    说明:        初始化单片机功能以及外接设备
************************************************************
*/
void CH422(void){

    //扫描检查高八位引脚每一位的状态,然后根据按键输入状态来控制LED灯的亮灭
        for(i = 0;i<4;i++)
        {
            if(!((CH422_ReadByte()>>i)& 1))
            {
                DelayXms(10);
                
                if(!((CH422_ReadByte()>>i)& 1))
                {
                    switch (i){
                        case 0 :
                            Window_STA=!Window_STA;
                            BeepVoice();
                        break;
                        case 1 :
                            Window_STA=0;
                            BeepVoice();
                        break;
                        case 2 :
                            Light_STA=!Light_STA;
                            BeepVoice();
                        break;
                        case 3 :
                            Light_STA=0;
                            BeepVoice();
                        break;
                    }
                    sta = ! sta;
                    CH422_WriteByte(CH422_OC_H_CMD | (0xFF - (sta<<i)));
                }
            }
            DelayXms(1);
        }
}


/*
************************************************************
*    函数名称:    main
*
*    函数功能:    主函数
*
*    入口参数:    无
*
*    返回参数:    0
*
*    说    明:        
************************************************************
*/    
 int main(void)
 {     
    
    Hardware_Init();                                                 //延时函数初始化

    
    //检查机械按键LED灯是否正常亮灭
    for(i = 0;i<= 4;i++)
    {
        CH422_WriteByte(CH422_OC_H_CMD | (0xFF - (1<<i)));
        DelayXms(50);
    }


    LCD_Test();
    Lcd_Clear_Area(WHITE,0,40,128,88);
     
    Gui_DrawFont_GBK16(10,30,RED,WHITE, (u8 *)  "温度:    ");
    Gui_DrawFont_GBK16(10,48,RED,WHITE, (u8 *)  "湿度:    ");
    Gui_DrawFont_GBK16(10,64,RED,WHITE, (u8 *)  "光照:    ");
    Gui_DrawFont_GBK16(10,80,RED,WHITE, (u8 *)  "风扇:    ");
    Gui_DrawFont_GBK16(10,96,RED,WHITE, (u8 *)  "窗户:    ");
    Gui_DrawFont_GBK16(10,112,RED,WHITE,(u8 *)  "灯    :    ");

    while(1)
    {
        
        BHData();
        CH422();
        SHT20Data();
        SPILCD_DisString(50, 30,  16, BLUE, 1, "%.2f C  ",SHT20_Info.temperature);
        SPILCD_DisString(50, 48,  16, BLUE, 1, "%.2f %%RH",SHT20_Info.humidity);
        SPILCD_DisString(50, 64,  16, BLUE, 1, "%.2f lux",BH1750_Info.bh_data);    
        SPILCD_DisString(50, 80,  16, BLUE, 1, "%d      ",Fan_Info.Fan_status);
        SPILCD_DisString(50, 96,  16, BLUE, 1, "%d      ",Window_STA);
        SPILCD_DisString(50, 112, 16, BLUE, 1, "%d     ",Light_STA);
        DelayXms(100);
    }
 }
 

园区

/**
 * Copyright (c) 2017 China Mobile IOT.
 * All rights reserved.
 **/
#include <nbiot.h>
#include <utils.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include "platform.h"
#include "delay.h"
#include "key.h"
#include "led.h"
#include "SHT20.h"      /* ÎÂʪ¶È´«¸ÐÆ÷ */
#include "BH1750.h"     /* ¹âÕÕ´«¸ÐÆ÷ */
#include "Lcd_Driver.h"

nbiot_value_t temp;     /* ÎÂ¶È */
nbiot_value_t humi;     /* ʪ¶È */
nbiot_value_t illumi;
nbiot_value_t led;

extern float result_lx;
// "д"»Øµ÷º¯Êý
void write_callback(
        uint16_t       objid,
        uint16_t       instid,
        uint16_t       resid,
        nbiot_value_t *data)
{
    printf("write /%d/%d/%d£º%d\r\n",
            objid,
            instid,
            resid, data->value.as_bool);
if (objid == 3311 && instid == 0 && resid == 5850) /* LED */
{
 if(data->value.as_bool)
 {
   Lcd_Clear(WHITE);
   ledStatus.Led1Sta=1;
 }
   else
 {
   Lcd_Clear(BLACK);
   ledStatus.Led1Sta=0;
 }
}


}

// "¶Á"»Øµ÷º¯Êý
void read_callback(
        uint16_t       objid,
        uint16_t       instid,
        uint16_t       resid,
        nbiot_value_t *data)
{
    if (objid == 3303 && instid == 0 && resid == 5700) {        /* ÎÂ¶È */
        SHT20_INFO sht20 = { 0 };
        sht20 = SHT20_GetValue();
        temp.value.as_float = sht20.tempreture;
    } else if (objid == 3304 && instid == 0 && resid == 5700) { /* ʪ¶È */
        SHT20_INFO sht20 = { 0 };
        sht20 = SHT20_GetValue();
        humi.value.as_float = sht20.humidity;
    }else if (objid == 3301 && instid == 0 && resid == 5700) { 
     BH1750_test();
     illumi.value.as_float = result_lx;
    }else if (objid == 3311 && instid == 0 && resid == 5850) {
     led.value.as_bool = ledStatus.Led1Sta; 
    }

}

// "Ö´ÐÐ"»Øµ÷º¯Êý
void execute_callback(
        uint16_t       objid,
        uint16_t       instid,
        uint16_t       resid,
        nbiot_value_t *data,
        const void    *buff,
        size_t         size)
{
    printf("execute /%d/%d/%d\r\n",
            objid,
            instid,
            resid);
}

#ifdef NOTIFY_ACK
void notify_ack_callback(uint16_t       objid,
        uint16_t       instid,
        uint16_t       resid,
        nbiot_value_t *data,
        bool           ack)
{
    printf("notify ack /%d/%d/%d(%s)\r\n",
            objid,
            instid,
            resid,
            ack ? "true" : "false");
}
#endif

char uri[] = "coap://183.230.102.118:5683";   // Òýµ¼»ú·þÎñ
char *serv_addr = "183.230.102.118";          // ½ÓÈë»ú IP µØÖ·£¬ÔÝʱÎÞÓÃ
const char endpoint_name[] = "027414768570709;21290212";     // IMEI;IMSI
nbiot_device_t *dev = NULL;

time_t last_time = 0;
time_t cur_time = 0;

// ¸üÐÂ×ÊÔ´
void res_update(time_t interval)
{
    SHT20_INFO sht20;
    if (cur_time >= last_time + interval) {
        cur_time = 0;
        last_time = 0;

        /* ¸üÐÂÎÂʪ¶ÈÊýÖµ */
        temp.flag |= NBIOT_UPDATED;
        humi.flag |= NBIOT_UPDATED;
        sht20 = SHT20_GetValue();
        temp.value.as_float = sht20.tempreture;
        humi.value.as_float = sht20.humidity;
              illumi.flag |= NBIOT_UPDATED;
        BH1750_test();
              illumi.value.as_float = result_lx;
        led.flag |= NBIOT_UPDATED;
        led.value.as_bool = ledStatus.Led1Sta;

            
    } else if (cur_time == 0 && last_time == 0) {
        cur_time = nbiot_time();
        last_time = cur_time;
    } else {
        cur_time = nbiot_time();
    }
}

int main(int argc, char *argv[])
{
    int life_time = 300;
    int ret;

    // ³õʼ»¯Ê±ÖÓ¡¢´®¿ÚµÈ×ÊÔ´£¬NB-IoTÍøÂç½ÓÈë
    nbiot_init_environment(argc, argv);

#ifdef NOTIFY_ACK
    ret = nbiot_device_create(&dev,
            endpoint_name,
            uri,
            life_time,
            write_callback,
            read_callback,
            execute_callback,
            notify_ack_callback);
#else
    // ´´½¨É豸£¬×¢²á»Øµ÷º¯Êý
    ret = nbiot_device_create(&dev,
            endpoint_name,      /* É豸Ψһ±êʶ */
            uri,                /* Òýµ¼»úÐÅÏ¢ */
            life_time,          /* Ö¸¶¨ÐÄÌøʱ¼ä */
            write_callback,     /* OneNET ·¢Æðд×ÊÔ´µÄ»Øµ÷º¯Êý */
            read_callback,      /* OneNET ·¢Æð¶Á×ÊÔ´µÄ»Øµ÷º¯Êý */
            execute_callback);  /* OneNET ·¢Æð¿ØÖÆÖ¸ÁîµÄ»Øµ÷º¯Êý */
#endif

    if (ret)
    {
        nbiot_device_destroy(dev);
        printf("device add resource(/3200/0/5750) failed, code = %d.\r\n", ret);
    }
    illumi.type = NBIOT_FLOAT;
    illumi.flag = NBIOT_READABLE;
    ret = nbiot_resource_add(dev,
       3301,
       0,
       5700,
       &illumi);
       if (ret)
       {
       nbiot_device_destroy(dev);
       printf("device add resource(illumi) failed, code = %d.\r\n", ret);
       }
       led.type = NBIOT_BOOLEAN;
       led.flag = NBIOT_READABLE | NBIOT_WRITABLE;
       ret = nbiot_resource_add(dev,
           3311,
           0,
           5850,
           &led);
   if (ret)
{
      nbiot_device_destroy(dev);
      printf("device add resource(led) failed, code = %d.\r\n", ret);
}
    // Ìí¼ÓζÈ×ÊÔ´
    temp.type = NBIOT_FLOAT;
    temp.flag = NBIOT_READABLE;
    ret = nbiot_resource_add(dev,
            3303,   /* objId */
            0,      /* instId */
            5700,   /* resId */
            &temp);
    if (ret)
    {
        nbiot_device_destroy(dev);
        printf("device add resource(temp) failed, code = %d.\r\n", ret);
    }

    // Ìí¼Óʪ¶È×ÊÔ´
    humi.type = NBIOT_FLOAT;
    humi.flag = NBIOT_READABLE;
    ret = nbiot_resource_add(dev,
            3304,
            0,
            5700,
            &humi);
    if (ret)
    {
        nbiot_device_destroy(dev);
        printf("device add resource(humi) failed, code = %d.\r\n", ret);
    }

    // ×¢²áµÇ¼OneNET
    ret = nbiot_device_connect(dev, 100);

    if (ret)
    {
        nbiot_device_close(dev, 100);
        nbiot_device_destroy(dev);
        printf("connect OneNET failed.\r\n");
        nbiot_reset();
    } else {
        printf("connect OneNET success.\r\n");
    }

    do
    {
        // ÖÜÆÚÐÔ·¢ËÍÉ豸ע²áÃüÁî
        // Èç¹û×ÊÔ´ÓиüУ¬ÔòÉÏ´«ÖÁOneNET
        ret = nbiot_device_step(dev, 1);
        if (ret)
        {
            printf("device step error, code = %d.\r\n", ret);
        }

        // ÿ30Ãë¸üÐÂÒ»ÏÂÉ豸×ÊÔ´µÄÖµ
        res_update(30);

    } while (1);

    nbiot_clear_environment();

    printf("press enter key to exit...");

    return 0;
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值