W800-KIT-bluetooth-Датчик температуры (cht8305c) -RGB свет-demo

выпустить 2022-04-15 16: 49: 16

@TOC

Ссылка на bluetooth:
W801 Bluetooth передает данные и управляет дизайном (одн) -INDICATE
W801 Bluetooth передает данные и управляет дизайном (два) -NOTIFY как

В этой статье используется окружающая среда:
управлен: W800-KIT (Доска разработки, Только с умеренной влажностью)
совместим: W800 AIR101
Среда развития: CDK

==Написано спереди: ==
W800-KIT Что-то не так с датчиками тепловлажности, Большая вероятность-это проблема сенсоров. Пока не придет черновик, Проблема до сих пор не решена.

одн, Обзор проекта

^^^^Этот курс в основном о W800-KIT Базовое использование доски разработки (Не включать звук) , Пластина содержит датчик тепловлажности (cht8305c) , одн RGB ждат, И, конечно, аудиокорреляция, Но в этой статье нет аудио.
^^^^Официально demo Она основана на командной строке, Я думаю, это немного затруднительно, Таким образом, все разработки основаны на следующем CDK, В то же время инженерные работы основаны на предисловии w801bt. Можно проверить текст bt статьи, Помогает понять, что к чему, Конечно, большой парень, который думает, что у него неприятности, Код, который можно загрузить непосредственно в эту статью, прям read code. Эт стат github адрес;
==В этой статье содержится информация, включ C язык, Передача данных, Программирование по инструкции и так далее. Очень полезно для новичка, Новичок, я бы посоветовал взглянуть поближе. Старые руки могут быть проигнорированы==.

^^^^Программная функция: Доски для разработки собирают данные с сенсоров тепловлажности, CPU Данные о температуре и напряжении загружаются на телефон через bluetooth APP, Конец телефона APP Также можно регулировать панель разработки RGB Свет гаснет.

два, Инженерный проект

^^^^Для удобства для всех, Этот раздел в основном разбивает проект на три части.

2. 1, Передача данных из bluetooth

^^^^Связь-основа проекта, Таким образом, первый шаг состоит в Том, чтобы сначала запечатать формат данных, Протокол для передачи, Гарантированная точность передачи данных, В то же время подготовим предварительную фазу к получению следующих данных (например, Bluetooth передается через байты, И данные, загруженные на developard, уже готовы float тип, Таким образом, данные должны быть запечатаны) .

2. 1. 1, Формат приема данных на доске разработки
^^^^Посмотреть, можно ли увидеть схемы, RGB На самом деле их было трое led, Так что используйте по три IO Управление ртом, Чтобы достичь разных цветов, Усыновление WPM Управление тремя IO Просто скажи.
Вставьте описание изображения
^^^^Формат обработки данных на доске разработки:

баотоуск Исходные данные Проверка и Сумк конц
0XA5 3 байт (Три лампы, одн RGB Переключающий сигнал, 2 Байт RGB сто) Сумма всех исходных данных 0X5A

^^^^Данные в центральной таблице содержат три байта, Первые байты представлены в 8 бит соответственно:

0 1 2 3 4-7
LED0 LED1 LED2 RGB выключател сохран

^^^^Два последних байта представлены RGB Три лампы IO отверст PWM сто, Для удобства, Используется аналогично RGB555 Данные запечатаны, Каждый цвет усыновления 5 Представление бит.

0-4 5-9 10-14 15
R G B сохран

2. 1. 2, Формат передачи данных на доске разработки
В основном данные передаются с доски разработки: CPU температур (float) , CPU напряжен (float) , Температура датчика (float) , Влажность датчика (float) .

^^^^Панель посылает формат данных:

баотоуск Исходные данные Проверка и Сумк конц
0XA5 16 байт (cou напряжен (4) , cpu температур (4) , Температура датчика (4) , Влажность датчика (4) ) Сумма всех исходных данных 0X5A

^^^^Обратите внимание на все эти данные float Дан, При передаче bluetooth в данной статье используется однослойная передача, Таким образом, необходимо преобразование данных. ПреобразованиеСообществодостижен, ПроверьтеНижний датчикПроектный такт.

2. 2, RGB Проект лампы

^^^^RGB Лампочка была разработана двумя способами, Индивидуальное управление и WPM контролирова. ==Два контроля должны быть реализованы отдельно, Эта статья используется в основном PWM, Одиночный контроль заблокирован, Все, что нужно, может быть открыто, перепрограммировать. ==

^^^^Получил его из bluetooth==Исходные данные==Хранитьmsg[4]В массиве:

0 1 2 3
Длина исходных данных три LED и RGB Режим переключения PWM Восемь PWM На восемь

2. 2. 1, RGB Индивидуальное управление светом

^^^^Одиночный контроль использует только первые три, Программа:


void led_on_off (u8 data) 
{
    //Оценивайте каждую цифру отдельно,  Обратите внимание на необходимость смещения всех данных на самый низкий уровень для оценки,  Это означает выключение света:  00 откр  Другие данные закр
    if (data & 0x01 ! = 0) 
        tls_gpio_write (WM_IO_PB_00, 0) ; 
    else
        tls_gpio_write (WM_IO_PB_00, 1) ; 
    if (data    1&0x01 ! = 0) 
        tls_gpio_write (WM_IO_PB_01, 0) ; 
    else
        tls_gpio_write (WM_IO_PB_01, 1) ; 
    if (data    2&0x01 ! = 0) 
        tls_gpio_write (WM_IO_PB_02, 0) ; 
    else
        tls_gpio_write (WM_IO_PB_02, 1) ;     
}

==вниман==: Каждый из этих данных должен быть извлечен отдельно при вынесении приговора, Следовательно, необходимо смещение вправо&0x01, Блокируйте другие битные данные.

2. 2. 2, RGB свет PWM контролирова

^^^^PWM Управление немного сложнее, APP Это пришло по почте PWM Данные — это два отдельных байта, Таким образом, необходимо синтезировать два байта данных в Один байт. В этой статье реализуется сообщество:

typedef union RGB_DATA
{
    u8 rgb_u8[2]; 
    int16 rgb_i; 
    
}RGB_DATA; 

==вниман==: Просто объясни принцип такого использования, СообществоЭто означает, что все данные используются по одному и тому же адресу (Взять самый большой адрес в качестве основы) , По глазам видно, 16 битн rgb_i и rgb_u8[2]Используя тот же адрес памяти. Итак, загрузите данные bluetooth rgb_u8 В группе, Прямо из rgb_i Прочитайте и удалите синтетическую 16 Битные данные, Этот способ может быть удобным для быстрого преобразования данных. Конечно, кто-нибудь спросит? Почему бы не сделать это при помощи смещения? действительн int Тип данных можно обработать при помощи смещения, но float Какой тип? ? ? Таким образом, единое использование сообщества для преобразования данных. Ниже float В Том же духе.
Кром тог, Есть еще кое-что, что требует внимания, ==Размер==Это может повлиять на смещение данных, Конечно, обычные монологи не должны думать об этом.

^^^^PWM Код управления:


//PWM
pwm_demo (0, 100000, 255, 4, 0) ; 
pwm_demo (1, 100000, 255, 4, 0) ; 
pwm_demo (2, 100000, 255, 4, 0) ; 
. 
. 
. 
void led_pwm_rgb (RGB_DATA rgb_data) 
{
    tls_pwm_duty_config (0, 255 -  (u8)  (rgb_data. rgb_i  10 & 0x1f) *8) ; 
    tls_pwm_duty_config (1,  (u8)  ( (rgb_data. rgb_i  5)   10 & 0x1f) *8+1) ; 
    tls_pwm_duty_config (2, 255 -  (u8)  ( (rgb_data. rgb_i  10)   10 & 0x1f) *8) ; 
    //printf ("%d  pwm:  %d   %d   %d ", rgb_data. rgb_i,  (u8)  (rgb_data. rgb_i  10 & 0x1f) *8, 255 -  (u8)  ( (rgb_data. rgb_i  5)   10 & 0x1f) *8,  (u8)  ( (rgb_data. rgb_i  10)   10 & 0x1f) *8) ; 
}
. 
. 
. 
//RGB откр
//перв 4 Представление битных данных RGB Открыть,  Его можно отключить,  отправив данные.  
if (msg[1]  3 &0x01 ! = 0) 
    led_pwm_rgb (rgb_data) ; 
else
{
    tls_pwm_duty_config (0, 255) ; 
    tls_pwm_duty_config (1, 255) ; 
    tls_pwm_duty_config (2, 255) ; 
}

^^^^функцpwm_demo (0, 100000, 255, 4, 0) Сравнительная яма, И я использовал его раньше HAL Куп не такой, Это стоило мне больше часа. Функция представлена отдельно: проход, частот, duty Сто и period рамк. Давай ближе к делу, функциональный period для 0 Представлять постоянный выход PWM, Так что пиши прямо 0, duty За коэффициент пустоты, Внесите изменения в программу duty Прямое изменение коэффициента хейма. функцtls_pwm_duty_configПредставление модификаций duty сто, Первый параметр-номер канала, Вторая duty сто. ==В пределах 0-255==. В этой статье B0, B1, B2 Отдельный соответствующий канал 0, 1 и 2.

^^^^pwm параметрrgb_data. rgb_iВсе вместе 15 Активный бит данных, Извлечение данных по отдельности RGB, И немного внимания: 5 Битные номера могут быть представлены только в 31, Нужно увеличить изображение, Так образR/G/B соответствен*8. ==Вообще-то, этот код можно упростить, Просто поверни направо&0x1f прост, Не надо больше двигаться влево==.

2. 3, Проектирование сенсоров

2. 3. 1, Справочник по тепловлажности

^^^^Шаг первый-проверить руководство, В общем, в инструкции много инструкций, Просто найди основные данные для осмотра, Сначала посмотри в каталоге.
Вставьте описание изображения^^^^Это видно по картинке, В центре всего три места, Первое касается регистра, Второй этап-измерение температуры, Третий-из справочника demo. Просто читаю данные, Мы можем посмотреть demo, Если понадобится что-то еще, Для этого требуется индивидуальный взгляд на роль каждого регистра, Эта статья не расширяется, только читает данные (Официальная конструкция оборудования фиксирована, Неспособность выполнять такие функции, как сигнализация) .

Проверьте шаги считывания данных:
Вставьте описание изображения
^^^^Это видно по надписям, отобранным в раме, Не нужно ничего устанавливать, пока не прочитаете данные, Прямое чтение 0x00 Данные для регистра могут быть получены, Тогда все будет просто, Прямиком к официальным demo.
Вставьте описание изображения
Вставьте описание изображения
Его можно проектировать непосредственно в рамках процесса верхнего графа. В официальном руководстве есть ошибки, ct8305Одного не хватает h.
^^^^Специальное руководство по смене температуры и влажности 1. 1. 4 Инструкции в такте:
Вставьте описание изображения
^^^^Руководство также дало его IIC Читать и писать в порядке исполнения. Если бы я знал IIC слов, Можно смотреть прямо на карту, На диаграмме всё ясно.
Вставьте описание изображения
диаграммSПредставление начинается, Aвыраз ACK, SrОбозначать начало чтения, NA выраз NACK, PЗнак остановки. конкретн IIC Соглашение больше не является разъяснением, В интернете полно материалов, Можете сами проверить. Перевести диаграмму на белый язык: нача-Записать адрес оборудования (0x80) -Напиши адрес регистра-ждат 20ms-Напишите адрес устройства (0x81) -Прочитайте четыре байта данных за раз-прекрат.

2. 3. 2, Данные с сенсоров тепловлажности

^^^^Датчик температуры прошел IIC Прочитай данные, Поэтому сначала нужно разобраться с этим IIC Данные считываются и записываются. Код непосредственно просматривает исходный файл, Вот, пока не составим список основных кодов.

/**
 * @brief    read multibytes from the specified address of the eeprom
 * @param[in] dev_addr the dev address 
 * @param[in] addr the eeprom address will be read from
 * @param[in] buf     Pointer to data buffer
 * @param[in] len    amount of data to be read
 * @retval    null
 */
void IIC_ReadLenByte (u8 dev_addr, u16 reg_addr, u8 *buf, u16 len) 
{                  
    //printf ("\nread len addr=%x\n", ReadAddr) ; 
    //1 Сигнал начала
    tls_i2c_write_byte (dev_addr, 1) ;    
    tls_i2c_wait_ack () ;  
    tls_i2c_write_byte (reg_addr, 0) ;    
    tls_i2c_wait_ack () ;      
    tls_i2c_stop () ; 
    tls_os_time_delay (22) ;       
    tls_i2c_write_byte (dev_addr|0x01, 1) ; 
    tls_i2c_wait_ack () ;     
    while (len   0) 
    {
        *buf++ = tls_i2c_read_byte (1, 0) ; 
        tls_i2c_wait_ack () ;     
        len --; 
    }
    tls_i2c_stop () ; 
}

typedef union CHT_DATA
{
    u8 cht_i[8]; 
    float cht_f[2]; 
}CHT_DATA; 
void read_cht8305c_read (CHT_DATA *cht_data) 
{
    uint16 temp_i = 0; 
    uint16 humi_i = 0; 
    //Описание данных:  temp_h temp_l humi_h humi_l
    u8 cht_d[4] = {0}; 
    IIC_ReadLenByte (i2c_cht8305c_addr, 0x00, cht_d, 4) ; 
    
    temp_i =  (cht_d[0]  8)  + cht_d[1]; 
    humi_i =  (cht_d[2]  8)  + cht_d[3]; 
    cht_data- cht_f[0] =  (165*temp_i) /65535. 0-40. 0; 
    cht_data- cht_f[1] = humi_i/65535. 0; 
    
    cht_data- cht_f[0] =  (int)  (cht_data- cht_f[0]*100) /100. 0; 
    cht_data- cht_f[1] =  (int)  (cht_data- cht_f[1]*100) /100. 0; 
    
    printf ("%f   %f  %x  %x  %x  %x\r\n", cht_data- cht_f[0], cht_data- cht_f[1], cht_d[0], cht_d[1], cht_d[2], cht_d[3]) ; 
    
}

В вышеуказанном кодеdev_addrдля 0x80. Это написано в инструкции, AD0 Провода разные, Адрес был бы другим, W800 Эта панель заземлена напрямую, Используй первый адрес. (Адрес на нижней диаграмме не включает в себя биты чтения и записи, Так что их всего семь. )
Вставьте описание изображения
Данные плавающей и стационарной точек по-прежнему используются для преобразования данных в сообщества.

2. 3. 3, Тест на логический анализатор

^^^^Используйте анализатор логики, чтобы проверить, верны ли три набора данных: Напиши адрес и регистр, задержк, Читай данные.

    1. Напиши адрес и регистр

Вставьте описание изображения
Как указано на рисунке, Терминал пишет адрес устройства, Тогда напишите регистр с нормальным адресом.

    1. задержк 20ms

Вставьте описание изображения
Время задержки в норме.

    1. Читай данные

Вставьте описание изображения
Показатели в норме.
2. 3. 4, Вне темы
^^^^До сих пор. проанализировать IIC Данные чтения и записи в норме, Похоже, все в порядке. ==но, Данные, распечатанные с терминала, следующие==:
Вставьте описание изображения
==Это явно не те данные, эт. . . . Температура всегда была такой 30 окол, Влажность меняется, Но влажность хорошая? ? ? ==
Я когда-нибудь задавался вопросыом, что со мной не так, Но я прочитал руководство, Также был опробован официальный код логотипа. Это все неверные данные, Все, что у меня есть, это подозрение, что оборудование на доске не работает. . . . . В то же время я консультировалась с официальными лицами, Официальные лица также говорят, что с данными что-то не так. Ха-ха-ха , Аппаратные вопросыы не обсуждаются, Процедурная логика следует инструкциям. . . . Сосредоточьтесь на мысли, Освоение методов обучения-это то, что необходимо.

2. 4, Отправка данных в упаковке

^^^^Просто введи код:

//Отправка данных по длине:  0x5a+data_len+Контрольн сумм+0xa5
////Бит является действительным и не включает в себя головку кадра и конец, cpu8 Байт тепла и влажности 8 байт
bt_send_data_len = 11+8; 
typedef union ADC_DATA
{
    u8 adc_i[8]; 
    //содерж CPU Напряжение и температура
    float adc_f[2]; 
}ADC_DATA; 
//0xa5 (0)  8 Данные (1-8)  Контрольн сумм (9)  0x5a (10) 
. . . . . . . . . . . . . . Следующий код не является завершенной функцией,  Это часть кода,  Полный загрузка github инженерн. . . . . . . . . . . . . . . . . . . . . . 
//Добавьте кадр
send_data[0] = 0xA5; 
send_data[bt_send_data_len-2] = 0; 
for (u8 i=0; i 8; i++) 
{
    //ZhuanCun cpu Данные по напряжению и температуре отправляются в массив
    send_data[i+1] = adc_data. adc_i[i]; 
    //Сохранившиеся данные с сенсоров тепловлажности посылаются в массив
    send_data[i+8+1] = cht_data. cht_i[i]; 
    //Вычисление и проверка,  Эффективная сумма данных
    send_data[bt_send_data_len-2] += adc_data. adc_i[i]; 
    send_data[bt_send_data_len-2] += cht_data. cht_i[i]; 
}
//Добавочный кадр
send_data[bt_send_data_len-1] = 0x5A; 
//printf ("send state: %d \r\n", tls_ble_server_demo_api_send_msg (send_data, 3) ) ; 
tls_ble_server_demo_api_send_notify_msg (send_data, bt_send_data_len) ; 

три, тест

CPU напряжен, CPU температур, Данные сенсоров тепловлажности в норме.
Вставьте описание изображения
Панель разработки в норме: Открыть и закрыть LED_RGB нормальн. Кнопка скольжения LED Цвет меняется.
Вставьте описание изображения

3 Комментарий

опубликова
вопросы