感謝電子技術(shù)應(yīng)用的這次活動,,免費申請獲得了一塊ch579的開發(fā)板。先簡單介紹一下這塊板子吧,,作為一款新型的開發(fā)板,,CH579開發(fā)板在性能,、功能、易用性等方面都有著不俗的表現(xiàn),,CH579開發(fā)板采用了ARM Cortex-M33內(nèi)核,,最高主頻可達(dá)200MHz,擁有512KB的Flash存儲器和160KB的SRAM存儲器,,支持USB 2.0,、UART、SPI,、I2C等多種通信接口,,同時還具備多種傳感器接口和擴(kuò)展接口,可滿足各種應(yīng)用場景的需求,。
開發(fā)板開箱視頻鏈接:
https://www.bilibili.com/video/BV1GM411V7wi/?vd_source=b0cd315f5f5adeeeba38907a05a4524a
通過測試,,該開發(fā)板理論上可實現(xiàn)下述功能:(我只是測試了對一些傳感器的應(yīng)用一起其它功能,畢竟精力有限)
物聯(lián)網(wǎng)設(shè)備開發(fā):CH579開發(fā)板支持多種通信接口,,包括USB,、UART,、SPI,、I2C等,可以用于開發(fā)各種物聯(lián)網(wǎng)設(shè)備,,如智能家居,、智能穿戴設(shè)備等。
工業(yè)自動化控制:CH579開發(fā)板支持PWM輸出和ADC輸入,,可以用于控制電機,、傳感器等工業(yè)設(shè)備,實現(xiàn)自動化控制,。
機器人控制:CH579開發(fā)板支持多種傳感器接口,,如I2C、SPI等,,可以用于機器人的控制和感知,,如紅外線傳感器、超聲波傳感器等。
數(shù)據(jù)采集和處理:CH579開發(fā)板具有512KB的Flash存儲器和160KB的SRAM存儲器,,可以用于數(shù)據(jù)采集和處理,,如溫度、濕度,、氣壓等環(huán)境參數(shù)的采集和處理,。
-----------------------------------------------------------------------------------------------------------------------------
項目名稱:智能溫度檢測器
功能:用戶可以通過手機APP或網(wǎng)頁端查看溫度數(shù)據(jù),并設(shè)置溫度報警功能,。
硬件:CH579開發(fā)板,、溫度傳感器、WIFI模塊,、LED燈,、蜂鳴器等。
軟件:嵌入式程序,、云端數(shù)據(jù)傳輸程序,、手機APP或網(wǎng)頁端程序
步驟:
硬件連接:將溫度傳感器連接到CH579開發(fā)板的I2C接口,WIFI模塊連接到UART接口,,LED燈和蜂鳴器連接到GPIO接口,。
編寫嵌入式程序:使用Keil等開發(fā)工具編寫嵌入式程序,實現(xiàn)溫度傳感器數(shù)據(jù)采集,、WIFI模塊數(shù)據(jù)傳輸,、LED燈和蜂鳴器報警等功能。
編寫云端數(shù)據(jù)傳輸程序:使用Python等語言編寫云端數(shù)據(jù)傳輸程序,,將溫度數(shù)據(jù)上傳到云端數(shù)據(jù)庫,,并實現(xiàn)數(shù)據(jù)可視化和報警功能。
編寫手機APP或網(wǎng)頁端程序:使用Android Studio等開發(fā)工具編寫手機APP或網(wǎng)頁端程序,,實現(xiàn)用戶查看溫度數(shù)據(jù)和設(shè)置報警功能等功能,。
調(diào)試和測試:進(jìn)行硬件和軟件的調(diào)試和測試,確保整個系統(tǒng)的穩(wěn)定性和可靠性,。
部分代碼:
//溫度傳感器數(shù)據(jù)采集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模塊數(shù)據(jù)傳輸使用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(); // 無限循環(huán)
while (1)
{ // 讀取溫度
read_temperature(&temperature); // 發(fā)送溫度數(shù)據(jù)到云端
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; // 發(fā)送讀取溫度命令
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); // 高字節(jié)
temp_data[1] = ch579_i2c_recv_byte(0); // 低字節(jié)
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網(wǎng)絡(luò)
sprintf(wifi_cmd, "AT+CWJAP=\"%s\",\"%s\"\r\n", WIFI_SSID, WIFI_PASSWORD);
ch579_uart_send_string(wifi_cmd);
ch579_delay_ms(5000); // 連接云端服務(wù)器
sprintf(wifi_cmd, "AT+CIPSTART=\"TCP\",\"%s\",%d\r\n", SERVER_ADDR, SERVER_PORT);
ch579_uart_send_string(wifi_cmd);
ch579_delay_ms(5000); // 發(fā)送數(shù)據(jù)
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);
}
需要查閱相關(guān)資料的可以上沁恒官網(wǎng):
https://www.wch.cn/downloads/CH579EVT_ZIP.html
https://www.wch.cn/downloads/CH579DS1_PDF.html