#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;
}