123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- /*
- * Copyright (c) 2020 Jinan Bosai Network Technology Co., LTD
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #include "BH1750.h"
- #include "cmsis_os2.h"
- #include "iot_errno.h"
- #include "iot_gpio.h"
- #include "iot_gpio_ex.h"
- #include "iot_i2c.h"
- #include <math.h>
- #include <stdio.h>
- #include <string.h>
- #include <unistd.h>
- #define WIFI_IOT_IO_FUNC_GPIO_0_I2C1_SDA 6
- #define WIFI_IOT_IO_FUNC_GPIO_1_I2C1_SCL 6
- #define WIFI_IOT_IO_FUNC_GPIO_7_GPIO 0
- #define WIFI_IOT_I2C_IDX_1 1
- #define CTL_IO1 14
- #define CTL_IO2 8
- #define CTL_IO3 12
- #define CTL_IO4 5
- // #define CTL_IO5 5
- // #define CTL_IO6 14
- // #define CTL_IO7 8
- // #define CTL_IO8 3
- // #define CTL_IO9 4
- // #define CTL_IO10 6
- /***************************************************************
- * 函数名称: FanGpioInit
- * 说 明: GPIO初始化
- * 参 数: 无
- * 返 回 值: 无
- ***************************************************************/
- static void FanGpioInit(void)
- {
- IoTGpioInit(CTL_IO1);
- IoTGpioSetFunc(CTL_IO1, IOT_GPIO_FUNC_GPIO_14_GPIO);
- IoTGpioSetDir(CTL_IO1, IOT_GPIO_DIR_OUT); //设置为输出模式
- IoTGpioInit(CTL_IO2);
- IoTGpioSetFunc(CTL_IO2, IOT_GPIO_FUNC_GPIO_8_GPIO);
- IoTGpioSetDir(CTL_IO2, IOT_GPIO_DIR_OUT); //设置为输出模式
- IoTGpioInit(CTL_IO3);
- IoTGpioSetFunc(CTL_IO3, IOT_GPIO_FUNC_GPIO_12_GPIO);
- IoTGpioSetDir(CTL_IO3, IOT_GPIO_DIR_OUT); //设置为输出模式
- IoTGpioInit(CTL_IO4);
- IoTGpioSetFunc(CTL_IO4, IOT_GPIO_FUNC_GPIO_5_GPIO);
- IoTGpioSetDir(CTL_IO4, IOT_GPIO_DIR_OUT); //设置为输出模式
- // IoTGpioInit(CTL_IO5);
- // IoTGpioSetFunc(CTL_IO5, IOT_GPIO_FUNC_GPIO_5_GPIO);
- // IoTGpioSetDir(CTL_IO5, IOT_GPIO_DIR_OUT); //设置为输出模式
- // IoTGpioInit(CTL_IO6);
- // IoTGpioSetFunc(CTL_IO6, IOT_GPIO_FUNC_GPIO_14_GPIO);
- // IoTGpioSetDir(CTL_IO6, IOT_GPIO_DIR_OUT); //设置为输出模式
- // IoTGpioInit(CTL_IO7);
- // IoTGpioSetFunc(CTL_IO7, IOT_GPIO_FUNC_GPIO_8_GPIO);
- // IoTGpioSetDir(CTL_IO7, IOT_GPIO_DIR_OUT); //设置为输出模式
- // IoTGpioInit(CTL_IO8);
- // IoTGpioSetFunc(CTL_IO8, IOT_GPIO_FUNC_GPIO_3_GPIO);
- // IoTGpioSetDir(CTL_IO8, IOT_GPIO_DIR_OUT); //设置为输出模式
- // IoTGpioInit(CTL_IO9);
- // IoTGpioSetFunc(CTL_IO9, IOT_GPIO_FUNC_GPIO_4_GPIO);
- // IoTGpioSetDir(CTL_IO9, IOT_GPIO_DIR_OUT); //设置为输出模式
- // IoTGpioInit(CTL_IO10);
- // IoTGpioSetFunc(CTL_IO10, IOT_GPIO_FUNC_GPIO_6_GPIO);
- // IoTGpioSetDir(CTL_IO10, IOT_GPIO_DIR_OUT); //设置为输出模式
- }
- /***************************************************************
- * 函数名称: GpioInit
- * 说 明: GPIO初始化
- * 参 数: 无
- * 返 回 值: 无
- ***************************************************************/
- static void GpioInit(void)
- {
- IoTGpioInit(7);
- IoTGpioSetFunc(7, WIFI_IOT_IO_FUNC_GPIO_7_GPIO);
- IoTGpioSetDir(7, IOT_GPIO_DIR_OUT); //设置GPIO_7为输出模式
- IoTGpioInit(0);
- IoTGpioSetFunc(0, WIFI_IOT_IO_FUNC_GPIO_0_I2C1_SDA); // GPIO_0复用为I2C1_SDA
- IoTGpioInit(1);
- IoTGpioSetFunc(1, WIFI_IOT_IO_FUNC_GPIO_1_I2C1_SCL); // GPIO_1复用为I2C1_SCL
- IoTI2cInit(WIFI_IOT_I2C_IDX_1, 400000); /* baudrate: 400kbps */
- }
- /***************************************************************
- * 函数名称: InitBH1750
- * 说 明: 写命令初始化BH1750
- * 参 数: 无
- * 返 回 值: 0 成功; -1 失败
- ***************************************************************/
- static int InitBH1750(void)
- {
- int ret;
- uint8_t send_data[1] = {0x01};
- ret = IoTI2cWrite(WIFI_IOT_I2C_IDX_1, (BH1750_ADDR << 1) | 0x00, send_data, 1);
- if (ret != 0) {
- printf("===== Error: I2C write ret = 0x%x! =====\r\n", ret);
- return -1;
- }
- return 0;
- }
- /***************************************************************
- * 函数名称: StartBH1750
- * 说 明: 启动BH1750
- * 参 数: 无
- * 返 回 值: 0 成功; -1 失败
- ***************************************************************/
- static int StartBH1750(void)
- {
- int ret;
- uint8_t send_data[1] = {0x10};
- ret = IoTI2cWrite(WIFI_IOT_I2C_IDX_1, (BH1750_ADDR << 1) | 0x00, send_data, 1);
- if (ret != 0) {
- printf("===== Error: I2C write ret = 0x%x! =====\r\n", ret);
- return -1;
- }
- return 0;
- }
- /***************************************************************
- * 函数名称: E53SC1Init
- * 说 明: 初始化E53_SC1
- * 参 数: 无
- * 返 回 值: 0 成功; -1 失败
- ***************************************************************/
- int BoardInit(void)
- {
- int ret;
- FanGpioInit();
- GpioInit();
- ret = InitBH1750();
- if (ret != 0) {
- return -1;
- }
- return 0;
- }
- /***************************************************************
- * 函数名称: BH1750ReadData
- * 说 明: 测量光照强度
- * 参 数: data,光照强度数据指针
- * 返 回 值: 0 成功; -1 失败
- ***************************************************************/
- int BH1750ReadData(float* data)
- {
- int ret;
- int result;
- ret = StartBH1750(); // 启动传感器采集数据
- if (ret != 0) {
- printf("Start BH1750 failed!\r\n");
- return -1;
- }
- usleep(180000);
- uint8_t recv_data[2] = {0};
- ret = IoTI2cRead(WIFI_IOT_I2C_IDX_1, (BH1750_ADDR << 1) | 0x01, recv_data, 2); // 读取传感器数据
- if (ret != 0) {
- return -1;
- }
- *data = (float)(((recv_data[0] << 8) + recv_data[1]) / 1.2); //合成数据,即光照数据
- return 0;
- }
- /***************************************************************
- * 函数名称: LightStatusSet
- * 说 明: 灯状态设置
- * 参 数: status,ENUM枚举的数据
- * OFF,关灯
- * ON,开灯
- * 返 回 值: 无
- ***************************************************************/
- void LightStatusSet(SwitchStatus status)
- {
- if (status == ON) {
- IoTGpioSetOutputVal(7, 1); //设置GPIO_7输出高电平点亮LED灯
- }
- if (status == OFF) {
- IoTGpioSetOutputVal(7, 0); //设置GPIO_7输出低电平点亮LED灯
- }
- }
- /***************************************************************
- * 函数名称: FanStatusSet
- * 说 明: 风扇状态设置
- * 参 数: status,ENUM枚举的数据
- * OFF,关风扇
- * ON,开风扇
- * 返 回 值: 无
- ***************************************************************/
- void FanStatusSet(SwitchStatus status, uint8_t gear)
- {
-
- if (status == ON) {
- IoTGpioSetOutputVal(CTL_IO4, 1);
- switch (gear)
- {
- case 1:
- IoTGpioSetOutputVal(CTL_IO1, 1);
- IoTGpioSetOutputVal(CTL_IO2, 0);
- IoTGpioSetOutputVal(CTL_IO3, 0);
- osDelay(10);
- IoTGpioSetOutputVal(CTL_IO1, 0);
- IoTGpioSetOutputVal(CTL_IO2, 1);
- IoTGpioSetOutputVal(CTL_IO3, 0);
- osDelay(10);
- IoTGpioSetOutputVal(CTL_IO1, 0);
- IoTGpioSetOutputVal(CTL_IO2, 0);
- IoTGpioSetOutputVal(CTL_IO3, 1);
- osDelay(10);
- break;
-
- default:
- break;
- }
- }
- if (status == OFF) {
- IoTGpioSetOutputVal(CTL_IO1, 0);
- IoTGpioSetOutputVal(CTL_IO2, 0);
- IoTGpioSetOutputVal(CTL_IO3, 0);
- IoTGpioSetOutputVal(CTL_IO4, 0);
- // IoTGpioSetOutputVal(CTL_IO5, 0);
- // IoTGpioSetOutputVal(CTL_IO6, 0);
- // IoTGpioSetOutputVal(CTL_IO7, 0);
- // // IoTGpioSetOutputVal(CTL_IO8, 0);
- // IoTGpioSetOutputVal(CTL_IO9, 0);
- // IoTGpioSetOutputVal(CTL_IO10, 0);
- }
- }
|