开始来实现PHY6220透传串口通讯智能控制照明灯光,要用到两个工程文件(ble_uart_profile_server_demo和ble_uart_profile_client_demo)
要控制板子上的RGB灯来演示,需要添加Packages里的drv_light
修改init.c文件
- #include
- #include
- #include
- #include
- #include tition.h>
- #include
- #include
- #include "pin_name.h"
- #include "app_init.h"
- #include "../app_main.h"
- #include
- #include "drv_light.h"
- const char *TAG = "INIT";
- #ifndef CONSOLE_IDX
- #define CONSOLE_IDX 0
- #endif
- static int init_flag = 1;
- #define ON 1
- #define OFF 0
- static pwm_dev_t pmw_light[3];
- static pwm_port_func_t pwm_channel_config[] = {
- {PIN_LED_R, PIN_LED_R_CHANNEL, PWM_LED_R_PORT},
- {PIN_LED_G, PIN_LED_G_CHANNEL, PWM_LED_G_PORT},
- {PIN_LED_B, PIN_LED_B_CHANNEL, PWM_LED_B_PORT},
- };
- static led_light_cfg_t led_light_config[] = {
- LED_LIGHT_MODEL(RGB_LIGHT, &pwm_channel_config[0], LOW_LIGHT, &pmw_light[0], 3)
- };
- static void _led_init(void)
- {
- if(init_flag){
- led_light_init(led_light_config);
- init_flag = 0;
- }
- }
- static void _led_set(bool on,uint8_t r_s,uint8_t g_s,uint8_t b_s,uint8_t r_a,uint8_t g_a,uint8_t b_a)
- {
- struct genie_rgb_op rgb_config;
- if (on) {
- rgb_config.rgb_config[0].power_switch = r_s;
- rgb_config.rgb_config[1].power_switch = g_s;
- rgb_config.rgb_config[2].power_switch = b_s;
- rgb_config.rgb_config[0].led_actual = r_a;
- rgb_config.rgb_config[1].led_actual = g_a;
- rgb_config.rgb_config[2].led_actual = b_a;
- }else {
- rgb_config.rgb_config[0].power_switch = 0;
- rgb_config.rgb_config[1].power_switch = 0;
- rgb_config.rgb_config[2].power_switch = 0;
- rgb_config.rgb_config[0].led_actual = 0;
- rgb_config.rgb_config[1].led_actual = 0;
- rgb_config.rgb_config[2].led_actual = 0;
- }
- led_light_control((void *)&rgb_config);
- }
- void app_set_led_state(int state)
- {
- _led_init();
- switch (state) {
- case LED_OFF:
- _led_set(OFF,OFF,OFF,OFF,0,0,0);
- break;
- case LED_ON:
- _led_set(ON,ON,ON,ON,255,255,255);
- break;
- case LED_ATTENTION_ON:
- _led_set(ON,ON,OFF,OFF,255,0,0);
- break;
- case LED_ATTENTION_OFF:
- _led_set(OFF,OFF,OFF,OFF,0,0,0);
- break;
- case LED_UNPROVED:
- _led_set(ON,OFF,ON,OFF,0,255,0);
- break;
- case LED_PROVED:
- _led_set(ON,OFF,OFF,ON,0,0,255);
- break;
- default:
- _led_set(OFF,OFF,OFF,OFF,0,0,0);
- break;
- }
- /* LED lights are working all the time,no need to close.*/
- //led_close(led_dev);
- }
- void board_yoc_init()
- {
- int ret;
- board_init();
- console_init(CONSOLE_UART_IDX, 115200, 0);
- ulog_init();
- aos_set_log_level(AOS_LL_DEBUG);
- /* load partition */
- ret = partition_init();
- if (ret <= 0) {
- LOGE(TAG, "partition init failed");
- } else {
- LOGI(TAG, "find %d partitions", ret);
- }
- /* kvfs init */
- aos_kv_init("kv");
- LOGI(TAG, "Build:%s,%s", __DATE__, __TIME__);
- }
复制代码
修改main.c
- /*
- * Copyright (C) 2019-2020 Alibaba Group Holding Limited
- */
- #include
- #include
- #include
- #include "aos/ble.h"
- #include "app_main.h"
- #include "app_init.h"
- #include "pin_name.h"
- #include "common/log.h"
- #include "yoc/uart_client.h"
- #define TAG "UART CLIENT"
- #define DEVICE_NAME "YoC UART CLIENT"
- ble_uart_client_t g_uart_client;
- uart_handle_t g_uart_client_handler = NULL;
- aos_sem_t sync_sem;
- uint8_t g_scan_start_flag = 0;
- static void conn_change(ble_event_en event, void *event_data)
- {
- evt_data_gap_conn_change_t *e = (evt_data_gap_conn_change_t *)event_data;
- if (e->connected == CONNECTED) {
- connect_info_t info = {0};
- ble_stack_connect_info_get(e->conn_handle, &info);
- LOGI(TAG, "+CONNECTED:%02x:%02x:%02x:%02x:%02x:%02x,%02x", info.peer_addr.val[5], info.peer_addr.val[4],
- info.peer_addr.val[3], info.peer_addr.val[2], info.peer_addr.val[1], info.peer_addr.val[0], info.peer_addr.type);
- } else {
- LOGI(TAG, "+DISCONNECTED:%02x", e->err);
- g_scan_start_flag = 0;
- }
- }
- static void mtu_exchange(ble_event_en event, void *event_data)
- {
- LOGI(TAG, "");
- }
- static int uart_client_profile_recv(const uint8_t *data, int length)
- {
- LOGI(TAG, "+DATA:%s", bt_hex(data, length));
- return 0;
- }
- static int user_event_callback(ble_event_en event, void *event_data)
- {
- switch (event) {
- //common event
- case EVENT_GAP_CONN_CHANGE:
- conn_change(event, event_data);
- break;
- case EVENT_GATT_MTU_EXCHANGE:
- mtu_exchange(event, event_data);
- break;
- default:
- break;
- }
- return 0;
- }
- int main()
- {
- int ret;
- init_param_t init = {
- .dev_name = DEVICE_NAME,
- .dev_addr = NULL,
- .conn_num_max = 1,
- };
- board_yoc_init();
- LOGI(TAG, "Bluetooth uart client demo!");
- aos_sem_new(&sync_sem, 0);
- ble_stack_init(&init);
- g_uart_client.uart_recv = uart_client_profile_recv;
- g_uart_client.uart_event_callback = user_event_callback;
- g_uart_client.client_data.client_conf.conn_def_on = 1;
- g_uart_client_handler = uart_client_init(&g_uart_client);
- if (!g_uart_client_handler) {
- LOGE(TAG, "init ble uart client demo faild");
- }
- int sum = 0;
- char data[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
- char data2[3] = {0, 1, 2};
- app_set_led_state(LED_OFF);
- while (1) {
- sum = sum + 1 ;
- aos_sem_wait(&sync_sem, 2000);
- if (g_uart_client.conn_handle >= 0) {
- if (g_uart_client.client_data.uart_profile.notify_enabled) {
- //ret = uart_client_send(g_uart_client_handler, data, sizeof(data), NULL);
- if(sum%2==0){
- ret = uart_client_send(g_uart_client_handler, data, sizeof(data), NULL);
- app_set_led_state(LED_OFF);
- }
- else {
- ret = uart_client_send(g_uart_client_handler, data2, sizeof(data2), NULL);
- app_set_led_state(LED_ON);
- }
- if (ret) {
- LOGE(TAG, "send data faild");
- }
- }
- } else {
- if (!g_scan_start_flag) {
- ret = uart_client_scan_start();
- if (ret) {
- LOGE(TAG, "scan start faild");
- } else {
- g_scan_start_flag = 1;
- }
- }
- }
- }
- return 0;
- }
复制代码
ble_uart_profile_server_demo项目中还要注意修改一下串口收到指令之后触发RGB亮灭
|
|
|
|
|
|