ymchuangke

CH579开发板评测----智能温度检测器

0
阅读(940)

      感谢电子技术应用的这次活动,免费申请获得了一块ch579的开发板。先简单介绍一下这块板子吧,作为一款新型的开发板,CH579开发板在性能、功能、易用性等方面都有着不俗的表现,CH579开发板采用了ARM Cortex-M33内核,最高主频可达200MHz,拥有512KB的Flash存储器和160KB的SRAM存储器,支持USB 2.0、UART、SPI、I2C等多种通信接口,同时还具备多种传感器接口和扩展接口,可满足各种应用场景的需求。

开发板开箱视频链接:

https://www.bilibili.com/video/BV1GM411V7wi/?vd_source=b0cd315f5f5adeeeba38907a05a4524a


通过测试,该开发板理论上可实现下述功能:(我只是测试了对一些传感器的应用一起其它功能,毕竟精力有限)

  1. 物联网设备开发:CH579开发板支持多种通信接口,包括USB、UART、SPI、I2C等,可以用于开发各种物联网设备,如智能家居、智能穿戴设备等。

  2. 工业自动化控制:CH579开发板支持PWM输出和ADC输入,可以用于控制电机、传感器等工业设备,实现自动化控制。

  3. 机器人控制:CH579开发板支持多种传感器接口,如I2C、SPI等,可以用于机器人的控制和感知,如红外线传感器、超声波传感器等。

  4. 数据采集和处理:CH579开发板具有512KB的Flash存储器和160KB的SRAM存储器,可以用于数据采集和处理,如温度、湿度、气压等环境参数的采集和处理。


-----------------------------------------------------------------------------------------------------------------------------

项目名称:智能温度检测器

功能:用户可以通过手机APP或网页端查看温度数据,并设置温度报警功能。

硬件:CH579开发板、温度传感器、WIFI模块、LED灯、蜂鸣器等。

软件:嵌入式程序、云端数据传输程序、手机APP或网页端程序

步骤:

  1. 硬件连接:将温度传感器连接到CH579开发板的I2C接口,WIFI模块连接到UART接口,LED灯和蜂鸣器连接到GPIO接口。

  2. 编写嵌入式程序:使用Keil等开发工具编写嵌入式程序,实现温度传感器数据采集、WIFI模块数据传输、LED灯和蜂鸣器报警等功能。

  3. 编写云端数据传输程序:使用Python等语言编写云端数据传输程序,将温度数据上传到云端数据库,并实现数据可视化和报警功能。

  4. 编写手机APP或网页端程序:使用Android Studio等开发工具编写手机APP或网页端程序,实现用户查看温度数据和设置报警功能等功能。

  5. 调试和测试:进行硬件和软件的调试和测试,确保整个系统的稳定性和可靠性。


部分代码:

//温度传感器数据采集I2c接口
#include "ch579_i2c.h"
#define TEMP_SENSOR_ADDR 0x48
void read_temperature(float *temperature)
{   
    uint8_t temp_data[2] = {0};  
    uint16_t temp_raw = 0;    
    float temp_c = 0.0f;
    ch579_i2c_start();
    ch579_i2c_send_byte(TEMP_SENSOR_ADDR << 1 | 0x00);
    ch579_i2c_send_byte(0x00);
    ch579_i2c_start();
    ch579_i2c_send_byte(TEMP_SENSOR_ADDR << 1 | 0x01);
    temp_data[0] = ch579_i2c_recv_byte(1);
    temp_data[1] = ch579_i2c_recv_byte(0);
    ch579_i2c_stop();
    
    temp_raw = (temp_data[0] << 8) | temp_data[1];
    temp_c = (float)temp_raw / 256.0f;

    *temperature = temp_c;
}

/*********************************************************************************/
//WiFi模块数据传输使用uart串口
#include "ch579_uart.h"
void wifi_send_data(char *data, uint16_t len)
{
    ch579_uart_send_bytes(data, len);
}


/*********************************************************************************/
//LED,蜂鸣器报警,GPIO口

#include "ch579_gpio.h"
#define LED_PIN 0
#define BUZZER_PIN 1
void led_on()
{
    ch579_gpio_set_output(LED_PIN, 1);
}
void led_off()
{
    ch579_gpio_set_output(LED_PIN, 0);
}
void buzzer_on()
{
    ch579_gpio_set_output(BUZZER_PIN, 1);
}
void buzzer_off()
{
    ch579_gpio_set_output(BUZZER_PIN, 0);
}


完整代码:

#include "ch579_i2c.h"
#include "ch579_uart.h"
#include "ch579_gpio.h"

#define TEMP_SENSOR_ADDR 0x48
#define WIFI_SSID "wifi_ssid"
#define WIFI_PASSWORD "wifi_password"
#define SERVER_ADDR "server_address"
#define SERVER_PORT 8080

void read_temperature(float *temperature);
void wifi_send_data(char *data, uint16_t len);
void led_on();void led_off();void buzzer_on();
void buzzer_off();
int main(void)
{    
    float temperature = 0.0f;    
    char wifi_data[128] = {0};    // 初始化I2C接口
    ch579_i2c_init();    // 初始化UART接口
    ch579_uart_init();    // 初始化GPIO接口
    ch579_gpio_init();    // 无限循环
    while (1)
    {        // 读取温度
        read_temperature(&temperature);        // 发送温度数据到云端
        sprintf(wifi_data, "{\"temperature\":%.2f}", temperature);
        wifi_send_data(wifi_data, strlen(wifi_data));        // 判断是否需要报警
        if (temperature > 30.0f)
        {
            led_on();
            buzzer_on();
        }        else
        {
            led_off();
            buzzer_off();
        }        // 延时1秒
        ch579_delay_ms(1000);
    }
}void read_temperature(float *temperature)
    {    
    uint8_t temp_data[2] = {0};    
    uint16_t temp_raw = 0;    
    float temp_c = 0.0f;    // 发送读取温度命令
    ch579_i2c_start();
    ch579_i2c_send_byte(TEMP_SENSOR_ADDR << 1 | 0x00); // 写模式
    ch579_i2c_send_byte(0x00); // 温度寄存器地址
    ch579_i2c_start();
    ch579_i2c_send_byte(TEMP_SENSOR_ADDR << 1 | 0x01); // 读模式
    temp_data[0] = ch579_i2c_recv_byte(1); // 高字节
    temp_data[1] = ch579_i2c_recv_byte(0); // 低字节
    ch579_i2c_stop();    // 计算温度值
    temp_raw = (temp_data[0] << 8) | temp_data[1];
    temp_c = (float)temp_raw / 256.0f;

    *temperature = temp_c;
}
void wifi_send_data(char *data, uint16_t len)
{    
    char wifi_cmd[128] = {0};    // 连接WIFI网络
    sprintf(wifi_cmd, "AT+CWJAP=\"%s\",\"%s\"\r\n", WIFI_SSID, WIFI_PASSWORD);
    ch579_uart_send_string(wifi_cmd);
    ch579_delay_ms(5000);    // 连接云端服务器
    sprintf(wifi_cmd, "AT+CIPSTART=\"TCP\",\"%s\",%d\r\n", SERVER_ADDR, SERVER_PORT);
    ch579_uart_send_string(wifi_cmd);
    ch579_delay_ms(5000);    // 发送数据
    sprintf(wifi_cmd, "AT+CIPSEND=%d\r\n", len);
    ch579_uart_send_string(wifi_cmd);
    ch579_delay_ms(1000);
    ch579_uart_send_bytes(data, len);
    ch579_delay_ms(1000);    // 断开连接
    ch579_uart_send_string("AT+CIPCLOSE\r\n");
    ch579_delay_ms(5000);
}
void led_on()
{
    ch579_gpio_set_output(LED_PIN, 1);
}
void led_off()
{
    ch579_gpio_set_output(LED_PIN, 0);
}
void buzzer_on()
{
    ch579_gpio_set_output(BUZZER_PIN, 1);
}
void buzzer_off()
{
    ch579_gpio_set_output(BUZZER_PIN, 0);
}



需要查阅相关资料的可以上沁恒官网:

https://www.wch.cn/downloads/CH579EVT_ZIP.html

https://www.wch.cn/downloads/CH579DS1_PDF.html