littlebot
Published on 2025-04-03 / 1 Visits
0

【源码】基于C语言的Azure Sphere温湿度监测应用

项目简介

本项目是基于C语言开发的应用程序,运行于Azure Sphere平台,结合Seeed Studio Grove Shield和Grove温湿度传感器(SHT31),实现温湿度数据的读取并输出到调试日志,还能通过GPIO控制LED灯闪烁。

项目的主要特性和功能

  • 数据采集:利用Grove温湿度传感器(SHT31)实时采集环境的温度和湿度数据。
  • 数据输出:将采集到的温湿度数据输出到调试日志,方便开发人员查看。
  • LED控制:通过GPIO控制LED灯的闪烁,实现简单的状态指示。

安装使用步骤

开发环境准备

  1. 复制项目源码。
  2. 安装Azure Sphere SDK,建议使用Azure Sphere SDK 19.11或更高版本,该版本使用CMake构建系统。
  3. 复制MT3620 Grove Shield库。

创建Visual Studio项目

  1. 启动Visual Studio,在复制MT3620 Grove Shield库的同一目录下创建新项目。
  2. 在搜索框中输入 sphere,选择Azure Sphere Blink模板。
  3. 命名项目并设置保存位置。

配置CMakeLists.txt

  1. 打开项目中的 CMakeLists.txt 文件。
  2. 添加MT3620 Grove Shield库的源位置和目标链接库。

设置应用程序权限

  1. 查看 Grove Shield Sensor Capabilities Quick Reference,了解每个传感器所需的权限。
  2. 打开 app_manifest.json 文件。
  3. 添加Uart ISU0,并确保GPIO 9用于控制LED灯。

更新代码

main.c 文件中的现有代码替换为以下代码: ```c

include

include

include

include

include

include

include

include

// Grove Temperature and Humidity Sensor

include "../MT3620_Grove_Shield/MT3620_Grove_Shield_Library/Grove.h"

include "../MT3620_Grove_Shield/MT3620_Grove_Shield_Library/Sensors/GroveTempHumiSHT31.h"

static volatile sig_atomic_t terminationRequested = false;

static void TerminationHandler(int signalNumber) { // Don't use Log_Debug here, as it is not guaranteed to be async signal safe terminationRequested = true; }

int main(int argc, char* argv[]) { Log_Debug("Application starting\n");

// Register a SIGTERM handler for termination requests
struct sigaction action;
memset(&action, 0, sizeof(struct sigaction));
action.sa_handler = TerminationHandler;
sigaction(SIGTERM, &action, NULL);

// Change this GPIO number and the number in app_manifest.json if required by your hardware.
int fd = GPIO_OpenAsOutput(9, GPIO_OutputMode_PushPull, GPIO_Value_High);
if (fd < 0) {
    Log_Debug(
        "Error opening GPIO: %s (%d). Check that app_manifest.json includes the GPIO used.\n",
        strerror(errno), errno);
    return -1;
}

// Initialize Grove Shield and Grove Temperature and Humidity Sensor
int i2cFd;
GroveShield_Initialize(&i2cFd, 115200);
void* sht31 = GroveTempHumiSHT31_Open(i2cFd);

const struct timespec sleepTime = { 1, 0 };
while (!terminationRequested) {

    GroveTempHumiSHT31_Read(sht31);
    float temp = GroveTempHumiSHT31_GetTemperature(sht31);
    float humi = GroveTempHumiSHT31_GetHumidity(sht31);
    Log_Debug("Temperature: %.1fC\n", temp);
    Log_Debug("Humidity: %.1f%%\n", humi);

    GPIO_SetValue(fd, GPIO_Value_Low);
    nanosleep(&sleepTime, NULL);

    GPIO_SetValue(fd, GPIO_Value_High);
    nanosleep(&sleepTime, NULL);
}

} ```

部署应用程序

  1. 通过USB将Azure Sphere连接到计算机。
  2. Select Startup 下拉菜单中选择 GDB Debugger (HLCore)
  3. 在Visual Studio中按 F5 键,构建、部署、启动应用程序,并将远程调试器附加到Azure Sphere。

查看调试输出

使用Visual Studio的 Ctrl+Alt+O 快捷键或点击底部/右侧的 Output 标签,打开 Output 窗口,查看 main.cLog_Debug 语句的输出。

设置调试断点

main.c 文件中,点击要设置断点的代码行左侧的边距,设置调试断点。例如,在 GroveTempHumiSHT31_Read(sht31); 行设置断点。

停止调试器

使用Visual Studio的 Shift+F5 快捷键或点击 Stop Debugging 图标,停止调试器。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】