哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一段ESP32S2代碼

丙丁先生的自學(xué)旅程 ? 來源:丙丁先生的自學(xué)旅程 ? 作者:丙丁先生的自學(xué)旅 ? 2025-11-11 07:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

/*

* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD

*

* SPDX-License-Identifier: Apache-2.0

*/


#include "esp_check.h"

#include "led_strip_rmt_encoder.h"


static const char *TAG = "led_rmt_encoder";


typedef struct {

rmt_encoder_t base;

rmt_encoder_t *bytes_encoder;

rmt_encoder_t *copy_encoder;

int state;

rmt_symbol_word_t reset_code;

} rmt_led_strip_encoder_t;


static size_t rmt_encode_led_strip(rmt_encoder_t *encoder, rmt_channel_handle_t channel, const void *primary_data, size_t data_size, rmt_encode_state_t *ret_state)

{

rmt_led_strip_encoder_t *led_encoder = __containerof(encoder, rmt_led_strip_encoder_t, base);

rmt_encoder_handle_t bytes_encoder = led_encoder->bytes_encoder;

rmt_encoder_handle_t copy_encoder = led_encoder->copy_encoder;

rmt_encode_state_t session_state = 0;

rmt_encode_state_t state = 0;

size_t encoded_symbols = 0;

switch (led_encoder->state) {

case 0: // send RGB data

encoded_symbols += bytes_encoder->encode(bytes_encoder, channel, primary_data, data_size, &session_state);

if (session_state & RMT_ENCODING_COMPLETE) {

led_encoder->state = 1; // switch to next state when current encoding session finished

}

if (session_state & RMT_ENCODING_MEM_FULL) {

state |= RMT_ENCODING_MEM_FULL;

goto out; // yield if there's no free space for encoding artifacts

}

// fall-through

case 1: // send reset code

encoded_symbols += copy_encoder->encode(copy_encoder, channel, &led_encoder->reset_code,

sizeof(led_encoder->reset_code), &session_state);

if (session_state & RMT_ENCODING_COMPLETE) {

led_encoder->state = 0; // back to the initial encoding session

state |= RMT_ENCODING_COMPLETE;

}

if (session_state & RMT_ENCODING_MEM_FULL) {

state |= RMT_ENCODING_MEM_FULL;

goto out; // yield if there's no free space for encoding artifacts

}

}

out:

*ret_state = state;

return encoded_symbols;

}


static esp_err_t rmt_del_led_strip_encoder(rmt_encoder_t *encoder)

{

rmt_led_strip_encoder_t *led_encoder = __containerof(encoder, rmt_led_strip_encoder_t, base);

rmt_del_encoder(led_encoder->bytes_encoder);

rmt_del_encoder(led_encoder->copy_encoder);

free(led_encoder);

return ESP_OK;

}


static esp_err_t rmt_led_strip_encoder_reset(rmt_encoder_t *encoder)

{

rmt_led_strip_encoder_t *led_encoder = __containerof(encoder, rmt_led_strip_encoder_t, base);

rmt_encoder_reset(led_encoder->bytes_encoder);

rmt_encoder_reset(led_encoder->copy_encoder);

led_encoder->state = 0;

return ESP_OK;

}


esp_err_t rmt_new_led_strip_encoder(const led_strip_encoder_config_t *config, rmt_encoder_handle_t *ret_encoder)

{

esp_err_t ret = ESP_OK;

rmt_led_strip_encoder_t *led_encoder = NULL;

ESP_GOTO_ON_FALSE(config && ret_encoder, ESP_ERR_INVALID_ARG, err, TAG, "invalid argument");

ESP_GOTO_ON_FALSE(config->led_model < LED_MODEL_INVALID, ESP_ERR_INVALID_ARG, err, TAG, "invalid led model");

led_encoder = calloc(1, sizeof(rmt_led_strip_encoder_t));

ESP_GOTO_ON_FALSE(led_encoder, ESP_ERR_NO_MEM, err, TAG, "no mem for led strip encoder");

led_encoder->base.encode = rmt_encode_led_strip;

led_encoder->base.del = rmt_del_led_strip_encoder;

led_encoder->base.reset = rmt_led_strip_encoder_reset;

rmt_bytes_encoder_config_t bytes_encoder_config;

uint32_t reset_ticks = config->resolution / 1000000 * 280 / 2; // reset code duration defaults to 280us to accomodate WS2812B-V5

if (config->led_model == LED_MODEL_SK6812) {

bytes_encoder_config = (rmt_bytes_encoder_config_t) {

.bit0 = {

.level0 = 1,

.duration0 = 0.3 * config->resolution / 1000000, // T0H=0.3us

.level1 = 0,

.duration1 = 0.9 * config->resolution / 1000000, // T0L=0.9us

},

.bit1 = {

.level0 = 1,

.duration0 = 0.6 * config->resolution / 1000000, // T1H=0.6us

.level1 = 0,

.duration1 = 0.6 * config->resolution / 1000000, // T1L=0.6us

},

.flags.msb_first = 1 // SK6812 transfer bit order: G7...G0R7...R0B7...B0(W7...W0)

};

} else if (config->led_model == LED_MODEL_WS2812) {

// different led strip might have its own timing requirements, following parameter is for WS2812

bytes_encoder_config = (rmt_bytes_encoder_config_t) {

.bit0 = {

.level0 = 1,

.duration0 = 0.3 * config->resolution / 1000000, // T0H=0.3us

.level1 = 0,

.duration1 = 0.9 * config->resolution / 1000000, // T0L=0.9us

},

.bit1 = {

.level0 = 1,

.duration0 = 0.9 * config->resolution / 1000000, // T1H=0.9us

.level1 = 0,

.duration1 = 0.3 * config->resolution / 1000000, // T1L=0.3us

},

.flags.msb_first = 1 // WS2812 transfer bit order: G7...G0R7...R0B7...B0

};

} else if (config->led_model == LED_MODEL_WS2811) {

// different led strip might have its own timing requirements, following parameter is for WS2811

bytes_encoder_config = (rmt_bytes_encoder_config_t) {

.bit0 = {

.level0 = 1,

.duration0 = 0.5 * config->resolution / 1000000., // T0H=0.5us

.level1 = 0,

.duration1 = 2.0 * config->resolution / 1000000., // T0L=2.0us

},

.bit1 = {

.level0 = 1,

.duration0 = 1.2 * config->resolution / 1000000., // T1H=1.2us

.level1 = 0,

.duration1 = 1.3 * config->resolution / 1000000., // T1L=1.3us

},

.flags.msb_first = 1

};

reset_ticks = config->resolution / 1000000 * 50 / 2; // divide by 2... signal is sent twice

} else {

assert(false);

}

ESP_GOTO_ON_ERROR(rmt_new_bytes_encoder(&bytes_encoder_config, &led_encoder->bytes_encoder), err, TAG, "create bytes encoder failed");

rmt_copy_encoder_config_t copy_encoder_config = {};

ESP_GOTO_ON_ERROR(rmt_new_copy_encoder(?_encoder_config, &led_encoder->copy_encoder), err, TAG, "create copy encoder failed");


led_encoder->reset_code = (rmt_symbol_word_t) {

.level0 = 0,

.duration0 = reset_ticks,

.level1 = 0,

.duration1 = reset_ticks,

};

*ret_encoder = &led_encoder->base;

return ESP_OK;

err:

if (led_encoder) {

if (led_encoder->bytes_encoder) {

rmt_del_encoder(led_encoder->bytes_encoder);

}

if (led_encoder->copy_encoder) {

rmt_del_encoder(led_encoder->copy_encoder);

}

free(led_encoder);

}

return ret;

}



審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4975

    瀏覽量

    74332
  • esp32s2
    +關(guān)注

    關(guān)注

    1

    文章

    1

    瀏覽量

    654
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    ESP32/ESP8266開發(fā)板單向對多ESP-NOW無線通信

    通過ESP-NOW無線通信協(xié)議實現(xiàn)ESP32開發(fā)板向多個ESP32/ESP 8266開發(fā)板發(fā)送數(shù)據(jù)。
    的頭像 發(fā)表于 03-13 09:23 ?259次閱讀
    <b class='flag-5'>ESP32</b>/<b class='flag-5'>ESP</b>8266開發(fā)板單向<b class='flag-5'>一</b>對多<b class='flag-5'>ESP</b>-NOW無線通信

    ESP32-S3系列】AD35-S3(AI紅色桌寵)上手指南

    AD35-S3是深圳市啟明云端有限公司推出的基于ESP32-S3-WROOM-1的新一代桌寵,有豐富的外設(shè)接口外,適用于AIoT領(lǐng)域的多種應(yīng)用場景,例如喚醒詞檢測和語音命令識別、智能家居、智能家電
    的頭像 發(fā)表于 02-26 18:05 ?325次閱讀
    【<b class='flag-5'>ESP32-S</b>3系列】AD35-<b class='flag-5'>S</b>3(AI紅色桌寵)上手指南

    ESP32-S2-MINI-2:高性能、高集成度的物聯(lián)網(wǎng)Wi-Fi模組解析

    ESP32-S2-MINI-2款緊湊的2.4 GHz Wi-Fi(802.11 b/g/n)模塊,內(nèi)置ESP32-S2 系列芯片(版本v1.0),搭載Xtensa單核32位LX7微控制器。該模塊
    的頭像 發(fā)表于 02-04 17:43 ?1203次閱讀
    <b class='flag-5'>ESP32-S2-MINI-2</b>:高性能、高集成度的物聯(lián)網(wǎng)Wi-Fi模組解析

    樂鑫科技ESP32-S3開發(fā)板+超聲波霧化,給智能魚缸整點美學(xué)氛圍

    我們?yōu)槭裁匆o智能魚缸弄上霧化?美學(xué)氛圍當(dāng)然是方面,但更重要的功能是局部加濕,為水面植物與周圍空氣提供柔和濕度。因此我們特意推出本期內(nèi)容:用樂鑫科技ESP32-S3開發(fā)板和超聲波霧化模塊讓水面形成
    的頭像 發(fā)表于 12-08 18:04 ?882次閱讀
    樂鑫科技<b class='flag-5'>ESP32-S</b>3開發(fā)板+超聲波霧化,給智能魚缸整點美學(xué)氛圍

    VSCode + ESP-IDF環(huán)境下給ESP32-S3項目添加頭文件

    VSCode + ESP-IDF環(huán)境下給ESP32-S3項目添加頭文件
    的頭像 發(fā)表于 11-28 07:27 ?3005次閱讀

    ESP32S工具鏈

    Xtensa LX6 ESP32、ESP32-S2 xtensa-esp-elf 早期ESP32的基礎(chǔ)架構(gòu) 2. 對你的影響 你正在開發(fā)
    發(fā)表于 11-26 07:33

    #ESP32S3野牛小智

    ESP32
    丙丁先生
    發(fā)布于 :2025年11月25日 08:34:06

    低成本開源!用樂鑫科技ESP32-S3開發(fā)板輕松驅(qū)動無刷電機,保姆級教程來了!

    想用ESP32-S3開發(fā)板驅(qū)動無刷電機卻不知從何下手?本教程將手把手教你完成從硬件連接到軟件編程的全流程,無論你是新手還是有定經(jīng)驗的開發(fā)者,都能輕松掌握!本教程代碼已全部開源!后臺私信關(guān)鍵詞
    的頭像 發(fā)表于 11-06 18:03 ?1076次閱讀
    低成本開源!用樂鑫科技<b class='flag-5'>ESP32-S</b>3開發(fā)板輕松驅(qū)動無刷電機,保姆級教程來了!

    快速上手!帶你用LVGL工具完成樂鑫科技ESP32-S3 2.8寸串口屏UI開發(fā)!代碼完全開源!

    酷炫的LVGL界面效果!本教程代碼全部開源!后臺私信關(guān)鍵詞“S3-2.8寸屏LVGL開發(fā)“自動獲取ESP32-S32.8寸串口屏LVGL開發(fā)源代碼百度網(wǎng)盤鏈接!串
    的頭像 發(fā)表于 10-30 18:04 ?2328次閱讀
    快速上手!帶你用LVGL工具完成樂鑫科技<b class='flag-5'>ESP32-S</b>3 2.8寸串口屏UI開發(fā)!<b class='flag-5'>代碼</b>完全開源!

    ESP32 I2S音頻總線學(xué)習(xí)筆記(二):I2S讀取INMP441音頻數(shù)據(jù)

    在這上篇文章中,我們介紹了ESP32 I2S音頻總線的相關(guān)知識,簡要了解了什么是I2S總線、它的通信格式,以及相關(guān)的底層API函數(shù),這篇文章將介紹
    的頭像 發(fā)表于 10-23 19:55 ?4823次閱讀
    <b class='flag-5'>ESP32</b> I<b class='flag-5'>2S</b>音頻總線學(xué)習(xí)筆記(二):I<b class='flag-5'>2S</b>讀取INMP441音頻數(shù)據(jù)

    ESP32-S3的MicroPython開發(fā)環(huán)境搭建

    本文通過搭建Thonny IDE開發(fā)環(huán)境,了解了如何給ESP32-S3燒錄MircoPython固件和MircoPython應(yīng)用程序。
    的頭像 發(fā)表于 09-11 16:02 ?1963次閱讀
    <b class='flag-5'>ESP32-S</b>3的MicroPython開發(fā)環(huán)境搭建

    文讀懂WAV音頻文件格式

    本文主要為后面ESP32 I2S音頻系列文章做鋪墊,所以本篇將介紹WAV音頻文件格式,并通過C代碼生成一段1S的正弦波WAV音頻寫入到SD卡
    的頭像 發(fā)表于 08-25 17:49 ?5455次閱讀
    <b class='flag-5'>一</b>文讀懂WAV音頻文件格式

    啟明云端ESP32-S3 2.8寸串口屏到手了?如何上手?看這篇!

    【場外插播】ESP32-S32.8寸串口屏、MX1.25-7P線、MX1.25-8P線我們都帶來了,開箱展示如下【競猜繼續(xù)】ESP32-S32.8寸串口屏到手還不知道如何上手點屏?不要擔(dān)心,我們的上手指南來了!
    的頭像 發(fā)表于 07-07 18:04 ?1111次閱讀
    啟明云端<b class='flag-5'>ESP32-S</b>3 2.8寸串口屏到手了?如何上手?看這篇!

    ESP32-P4 C5開發(fā)板燒錄小智全流程!速看!

    沒錯,你沒有看錯!我們帶著WT99P4C5-S1開發(fā)板燒錄小智全流程走來了!開發(fā)板搭載樂鑫科技ESP32-P4和ESP32-C5芯片,代碼完全開源,支持靈活二次開發(fā)。什么?文字教程不好
    的頭像 發(fā)表于 07-04 18:03 ?2819次閱讀
    <b class='flag-5'>ESP32</b>-P4 C5開發(fā)板燒錄小智全流程!速看!

    ESP32-S3開發(fā)板燒錄小智AI系統(tǒng)全流程指南

    在AI語音交互領(lǐng)域不斷發(fā)展的今天,開發(fā)者們對于功能強大、開源靈活的開發(fā)板需求日益增長。今天,我們就來詳細了解ESP32AgentDevKit燒錄小智的全流程,這款搭載樂鑫科技ESP32-S3芯片
    的頭像 發(fā)表于 06-16 18:01 ?8786次閱讀
    <b class='flag-5'>ESP32-S</b>3開發(fā)板燒錄小智AI系統(tǒng)全流程指南
    静海县| 上栗县| 井研县| 探索| 深泽县| 鸡泽县| 和静县| 道孚县| 江陵县| 鄂伦春自治旗| 隆林| 荔波县| 茶陵县| 大丰市| 班玛县| 武穴市| 怀柔区| 纳雍县| 林甸县| 琼结县| 温州市| 白朗县| 新建县| 边坝县| 将乐县| 武定县| 五常市| 揭东县| 高碑店市| 平南县| 黑龙江省| 临高县| 邢台市| 定陶县| 华宁县| 天镇县| 诸暨市| 株洲市| 喜德县| 新平| 姜堰市|