AnalogWrite for ESP32 and ESP32-S2 with LEDC PWM. Includes PWM Phase Control, DAC and Smart GPIO resource management.

Overview

analogWrite()

arduino-library-badge

image

ESP32 Installation Instructions

This library was tested using using the ESP32 Arduino IDE Boards Manager installation method.

  • Stable release link: tested with ESP32 Dev Module
  • Development release link: Tested with ESP32 Dev Module and ESP32-S2 Dev Module

Description

The analogWrite() function writes a duty cycle value to a (PWM wave) on a digital pin or an analog value to a DAC pin. It wraps the ESP32 Arduino framework's ledc functions and provides up to 8 PWM channels and works with the 2 DAC pins. A unique feature is its friendly and co-operative pin management where it will not attach to and use a pin that has been previously accessed by other code including any of the Arduino pin I/O functions. The use of this function is similar to the Arduino method as its resource management is handled transparently (you do not need to call pinMode()prior to use).

Now analogWrite can assign a pin and contol PWM duty value, frequency, resolution and phase all from one function. This function now returns the PWM frequency reported from the ledc framework.

Using AnalogWrite

3-phase PWM Example

Details: 3-pins (4, 5 and 12), 10-bit PWM split into 3 equal ON-periods of 341. Frequency is 100Hz. Signal on pin 5 is phase shifted by 341 steps, signal on pin 12 is shifted by 682 steps.

  analogWrite(4, 341, 100, 10, 0);
  analogWrite(5, 341, 100, 10, 341);
  analogWrite(12, 341, 100, 10, 682);

image

PWM Wave

Arduino's reference for analogWrite() describes the PWM wave characteristics for various hardware architecture. The general operational characteristic is 8-bit duty cycle control where the output will be always off for value 0 and always on for value 255. The ESP32's LEDc PWM does not turn fully on at the max duty value, i.e. for 8-bit resolution, the maximim duty is 255/256, but now this is corrected in software for 8-bits and higher resolution. For 1-7 bit resolution settings, the correction is not made and AnalogWrite works the same as the LEDc PWM control functions.

When using ESP32S2 devices, the core is in early development and the max frequency and bit resolutions are somewhat limited. On these devices, tested range is 8-bit: 4Hz to 2.5kHz, 13-bit 0.2Hz to 120Hz.

Board PWM Pins DAC Pins PWM Frequency Resolution
ESP32 2, 4, 5, 12-19, 21-23, 27, 32, 33 DAC1, DAC2 980 Hz default 1-16 bit PWM, 8-bit default
ESP32S2 1- 14, 21, 33-42, 45 DAC1, DAC2 980 Hz default 1-16 bit PWM, 8-bit default

AnalogWrite Options

float analogWrite(int8_t pin, int32_t value, float frequency, uint8_t resolution, uint32_t phase);
float analogWrite(int8_t pin, int32_t value, float frequency, uint8_t resolution);
float analogWrite(int8_t pin, int32_t value, float frequency);
float analogWrite(int8_t pin, int32_t value);

Basic Syntax

float analogWrite(pin, value);

Parameters

pin: The GPIO pin to write to. Allowed data types: int. value: The duty cycle between 0 (always off) and pow(2, resolution) (always on). This function automatically attaches the pin to the first available channel. To avoid conflicts with other code, the chosen pin will not be available if it was previously accessed by other code. If you need to release a pin that analogWrite has previously used, just use the command analogWrite(pin, -1); The return value is the PWM frequency reported by the LEDc methods. Various overload functions are provided (shown above) allowing the user to use only the parameters needed at any time.

analogWriteFrequency()

float analogWriteFrequency(int8_t pin, float frequency);

Sets the PWM frequency (default 980Hz) on any PWM pin. Returns the exact hardware frequency used by the timer.

analogWriteResolution()

int32_t analogWriteResolution(int8_t pin, uint8_t resolution);

The PWM resolution for any PWM pin can be set from 1-bit to 16-bit (default 8-bit). This has no effect on the DAC pins which are 8-bit only. Returns the maximum value that will be always on for the selected resolution: pow(2, resolution)

setPinsStatusDefaults()

void setPinsStatusDefaults(int32_t value = 0, float frequency = 980, uint8_t resolution = 8, uint32_t phase = 0);

This function sets the default PWM value, frequency, resolution and phase for all 8 channels. If called with no arguments, the defaults are as shown above, which matches the Arduino UNO PWM defaults. This is also the same as the startup defaults, so it's not a requirement to call this function unless new defaults are required.

printPinsStatus()

void printPinsStatus();

This function prints the available PWM pins to choose from and a formatted output showing the PWM pins that are in use (attached) and the channels that are available (-1). Resource management is handled automatically and transparently. There is no requirement to have any function in the setup loop. PWM resolution and frequency can be changed at any time in the main loop. If you enter a higher duty value than the limit, the status output will show the max value that has effect.

ESP32 Dev Board ESP32S2-Saola-1M
image image
All 8 channels offer independent resolution bits, duty cycle value and frequency . All 8 channels offer independent resolution bits, duty cycle value. Four independant frequencies on channels (0,1), (2,3), (4,5) and (6,7)
const uint64_t pinMask = 0x27FE00207FFE; const uint64_t pinMask = 0x308EFF034;

The the available PWM pins are determined by a pinMask constant. It might be necessary to alter the pimMask to match your board or to customize for your design.

Example Code

Notes

Both timer resolution and PWM frequency should be calculated to get expected results. Refer to Supported Range of Frequency and Duty Resolution as a reference.

  • Up to 8 PWM channels and 2 DAC pins are managed transparently
  • If required, a channel can be freed up by using analogWrite(pin, -1)
  • To co-operate with other code, analogWrite() will not work with any pin that has been previously accessed
This Library is licensed under the MIT License
Comments
  • calling analogWrite() frequently causes the pin to spend extra time low

    calling analogWrite() frequently causes the pin to spend extra time low

    @Dlloydev First of all, thank you for making a really cool library. Making analogWrite() supported is a big step towards making programs run on both esp32s and standard Arduino boards more easily!

    I was looking at the output of the Fade example with an oscilloscope and noticed the signal wasn't quite what I would expect. oscilloscope_fade Each time analogWrite was called to change the duty cycle on the pin, it seems the pin goes low for approximately 200 microseconds. This interrupts the otherwise good 5kHz PWM signal and means that even if the signal is set to 100% there will be intervals where the pin is LOW after each time analogWrite is called. This issue could cause unexpected results in any program where analogWrite is called frequently.

    Is ledcSetup getting called every time analogWrite is? That might be what's causing the issue because when I have used ledcSetup once then only ledcWrite later I don't get the dips. Would it be possible to check if the channel, resolution, or frequency needs to be changed? If only the duty cycle needs to be changed then I don't think ledcSetup needs to be called.

    Please let me know if I can help in any way. Thanks, joshua-8

    opened by joshua-8 5
  • [QUESTION] Usage for LED fading

    [QUESTION] Usage for LED fading

    Thanks for this library! My use case is fading up to 36 LED strips from an ESP32.

    I want to ask about it's operation because I did not fully understand it from the description. Taking for example an ESP32-S2 will it provide PWM capabilities for the pins: 1- 14, 21, 33-42, 45, so a total of 26 pins. This much is clear.

    What's not clear, for me, is: can I assign individual duty-cycles (PWM values) for each of these 26 pins so that I can fade each LED on it's own ? (the 8 PWM channels stuff gets me a bit confused) Is there any way for this library to support more than 26 pins?

    opened by clau-bucur 4
  • 'class Pwm' has no member named 'setServo'

    'class Pwm' has no member named 'setServo'

    Hi, I'm trying to use the libray to control a servo, but it doesn't work when i'm using the pwm.setServo function. It's not in the keywords.txt file :/ image

    opened by uPesy 3
  • Need to cycle power after an OTA update

    Need to cycle power after an OTA update

    For a simple 8 bit 20KHz fan PWM on pin 22 of a DOIT ESP32 DEVKIT V1 :

    In setup() I have:

      analogWrite(FAN, 0, 20000, 8); 
    

    In loop()I have:

      fan_pwm =  ... // a function of temperature
      analogWrite(FAN, fan_pwm);
    

    This works as expected but if I do an over the air update the PWM value gets stuck until I cycle the power and then it works again.

    Do I need to do something in the OTA code to stop the PWM or reinitialise it?

    opened by nophead 3
  • default resolution is different from normal Arduinos

    default resolution is different from normal Arduinos

    First of all, thank you so much for fixing the issue with ledcSetup getting called repeatedly! That issue is gone for me now, but I found another thing: When trying to use this library as a direct replacement for the standard analogWrite function, I noticed that the output was never going above a few percent on. Usually analogWrite has an 8 bit resolution, but this library seems to use 13 bits as default. It's really great that you provide the option to set higher resolutions since ESP32s can support that, but if it wouldn't be too difficult and if I'm not missing something, changing the default to 8 to be the same as the normal analogWrite would make this library even easier to use. Thanks, joshua-8

    opened by joshua-8 2
  • Add tone() and note() functions

    Add tone() and note() functions

    I think a tone() function would be nice to have in the next update (4.2.0)

    Initial thoughts on how this could work ...

    • use the existing pin management features of this library
    • can auto-attach or attach to specified channel
    • this function to be non-blocking
    • the frequency and resolution will affect a secondary channel. Therefore, ensure that this secondary channel is still useable for LED fade control (variable duty).
    • Add an ESP32 example showing use tone, servo and led fade control.
    opened by Dlloydev 1
  • Can't compil Example

    Can't compil Example

    file esp32_pwmWrite.ino

    C:\Users\xxxxx\Documents\Arduino\libraries\ESP32_ESP32S2_AnalogWrite\src\pwmWrite.cpp: In member function 'float Pwm::write(uint8_t, int32_t, float, uint8_t, uint32_t)': C:\Users\xxxxx\Documents\Arduino\libraries\ESP32_ESP32S2_AnalogWrite\src\pwmWrite.cpp:216:7: error: 'ledc_channel_config_t' has no non-static data member named 'flags' }; ^ exit status 1 Error compiling for board ESP32 Dev Module.

    opened by appplay01 1
  • Dead Time?

    Dead Time?

    Very nice library!

    Do you have suggestions on how to manage dead time?

    I.e. when building a half/full bridge, you need to 180 degree phase shifted PWM signals but you also need dead time so that the low side shuts off and then the high side turns on with a delay and then the high side turns off and the low side turns on with a delay. Otherwise you create a dead short. Normally this is about 40-60 ns.

    It would be awesome if this was a single function in this library something like: halfBridge(PinHigh, PinLo, dutyCycle, Frequency, deadTime);

    Where dutyCycle would automatically calculate based on the frequency (typically in the 2.2 mhz range)

    For a full bridge (hard switching zvs, boost/buck) fullBridge(pinBuckHigh, pinBuckLo, pinBoostHight, pinBoostLo, dutyCycle, frequency, deadTime)

    Where dutyCycle could be positive or negative.

    opened by JohnGalt1717 1
  • If channel is already used analogWrite fails.

    If channel is already used analogWrite fails.

    It would be nice to be able to assign a ledc channel to a pin. I want to use pin 13 but Channel 0 and 2 are already occupied by another libraries and awGetChannel(13) returns -1. Is there a workaround / solution?

    opened by ArminJo 1
  • changing resolution causes a single very short pulse

    changing resolution causes a single very short pulse

    Hi @Dlloydev, I was experimenting with using ledc to control a servo, and I found that using ledcSetup seems to cause a pulse to be output on an attached pin. It's more of an issue for servo control (it causes a twitch) than the use case of analogWrite (it wouldn't affect controlling an led), but I thought I'd let you know about this in case you plan to output servo signals (actually, it would be cool if the library would have a function that makes it easy to output servo signal PWM, but that's off topic now). Here's the code I used:

    #include "analogWrite.h"
    
    #define analogPin 33 //pin to analogWrite to
    #define triggerPin 26 //pin that triggers oscilloscope when resolution changed
    
    void setup() {
      pinMode(triggerPin,OUTPUT);
      digitalWrite(triggerPin,LOW);
      analogWrite(analogPin, 50);
      delay(1000); //wait a bit to get some pulses at the first resolution
      digitalWrite(triggerPin,HIGH); //trigger oscilloscope
      analogWriteResolution(analogPin, 10); //change resolution
    }
    void loop(){
      delay(1);
    }
    

    it produced the following signal: extra_pulse

    I found a potential fix for this issue: I was able to change frequency with ledcSetup without getting the pulse by using ledcDetachPin, then calling ledcSetup, and then calling ledcAttachPin.

    Since the pulse only happens once when changing resolution this is really not at all a critical bug to fix, but I thought you might want to know about it.

    Thank you for spending so much time making great opensource libraries!

    -joshua-8

    opened by joshua-8 1
  • Return value of analogWriteResolution

    Return value of analogWriteResolution

    I found that analogWriteResolution() always returns 0. According to the documentation it should return pow(2, resolution).

    https://github.com/Dlloydev/ESP32-ESP32S2-AnalogWrite/blob/6474044198650928d9417d0373725ade0fdbd398/analogWrite.cpp#L244

    So I assume the term should be either 1 << (resolution & 0xF); or just 1 << resolution;

    Thank you for your efforts Jan

    opened by ftjuh 1
Releases(4.2.4)
  • 4.2.4(Dec 28, 2022)

  • 4.2.3(Dec 27, 2022)

  • 4.2.2(Dec 25, 2022)

  • 4.2.1(Dec 16, 2022)

  • 4.2.0(Dec 14, 2022)

    Updated serial reporting and added new tone() function:

    • tone uses the existing pin management features of this library
    • tone can auto-attach or attach to a specified channel
    • tone function is non-blocking
    • the frequency and resolution will affect a secondary channel. This secondary channel can be used for LED fade control (variable duty).
    • added an ESP32 example showing use tone, servo and led fade control.
    Source code(tar.gz)
    Source code(zip)
  • 4.1.1(Dec 7, 2022)

    Servo function naming now closely matches other libraries. Improved performance, pin management and documentation.

    Servo function name comparison:

    | | dlloydev | RoboticsBrno | madhephaestus | Arduino | | --------- | ---------------- | ----------------- | ----------------- | ----------------- | | Library: | ...AnalogWrite | ServoESP32 | ESP32Servo | Servo | | Header: | pwmWrite.h | Servo.h | ESP32Servo.h | ServoTimers.h | | Attach: | attach | attach | attach | attach | | Query: | attached | attached | attached | attached | | Query: | attachedPin | attachedPin | --- | attachedPin | | Detach: | detach | detach | detach | detach | | Write: | writeServo | write | write | write | | Write µs: | writeServo | writeMicroseconds | writeMicroseconds | writeMicroseconds | | Read: | read | read | read | read | | Read µs: | readMicroseconds | readMicroseconds | readMicroseconds | readMicroseconds |

    Source code(tar.gz)
    Source code(zip)
  • 4.1.0(Dec 3, 2022)

  • 4.0.0(Nov 26, 2022)

    • For the ESP32, all 16 PWM channels are now available

      Board | PWM Pins | PWM, Duty and Phase Channels | Frequency and Resolution Channels -- | -- | -- | -- ESP32 | 2, 4, 5, 12-19, 21-23, 27, 32, 33 | 16 | 8 ESP32‑S2 | 1- 14, 21, 33-42, 45 | 8 | 4 ESP32‑C3 | 0- 9, 18, 19 | 6 | 3

    • The user can now manually attach (assign) a pin to any PWM channel.

    • New PWM synchronization pushes the LEDC capabilities closer to that of the MCPWM controller and it can synchronize more signals than MCPWM.

    PWM Synchronization:

    • New functions to pause/resume the timers to allow PWM startup synchronization.
    • Up to 8 PWM signal pairs are inherently synchronized. Channels 0-1, 2-3, 4-5, 6-7, 8-9, 10-11, 12-13, 14-15.
    • Each channel pair uses a different timer and/or speed mode. The timing delay between each signal pair can be essentially calibrated out by using the hpoint (phase) value to delay the PWM signal start. The result is the alignment of each signal pair (timer to timer synchronization).

    image

    PWM Channel Configuration

    Frequency and resolution values are shared by each channel pair. For example, channels 0 and 1 share the same frequency and resolution values. When any channel gets configured, the next lower or higher channel gets updated with the same frequency and resolution values as appropriate.

    PWM Channel | Speed Mode | Timer | Frequency | Resolution | Duty | Phase -- | -- | -- | -- | -- | -- | -- 0 | 0 | 0 | 1 | 1 | 1 | 1 1 | 0 | 0 | 1 | 1 | 2 | 2 2 | 0 | 1 | 2 | 2 | 3 | 3 3 | 0 | 1 | 2 | 2 | 4 | 4 4 | 0 | 2 | 3 | 3 | 5 | 5 5 | 0 | 2 | 3 | 3 | 6 | 6 6 | 0 | 3 | 4 | 4 | 7 | 7 7 | 0 | 3 | 4 | 4 | 8 | 8 8 | 1 | 0 | 5 | 5 | 9 | 9 9 | 1 | 0 | 5 | 5 | 10 | 10 10 | 1 | 1 | 6 | 6 | 11 | 11 11 | 1 | 1 | 6 | 6 | 12 | 12 12 | 1 | 2 | 7 | 7 | 13 | 13 13 | 1 | 2 | 7 | 7 | 14 | 14 14 | 1 | 3 | 8 | 8 | 15 | 15 15 | 1 | 3 | 8 | 8 | 16 | 16


    Source code(tar.gz)
    Source code(zip)
  • 3.0.4(Sep 26, 2022)

  • 3.0.3(Jul 6, 2022)

  • 3.0.2(Jun 19, 2022)

  • 3.0.1(Jun 18, 2022)

  • 3.0.0(Jun 18, 2022)

  • 2.0.9(Sep 19, 2021)

  • 2.0.8(May 18, 2021)

    • Fixes #6: Return value of analogWriteResolution (thanks @ftjuh)
    • Fixes #7: changing resolution causes a single very short pulse (thanks @joshua8)
    Source code(tar.gz)
    Source code(zip)
  • 2.0.7(May 13, 2021)

  • 2.0.6(May 2, 2021)

    • the default PWM settings are now 980 Hz with 8-bit resolution (same as Arduino UNO)
    • added setPinsStatusDefaults() function to allow custom default settings
    • updated documentation
    Source code(tar.gz)
    Source code(zip)
  • 2.0.5(May 2, 2021)

    • Added a namespace to internal functions to prevent name collisions with other libraries. The namespace is transparent to the user as the main AnalogWrite functions are not included in it.
    • Updated documentation
    Source code(tar.gz)
    Source code(zip)
  • 2.0.4(Apr 28, 2021)

  • 2.0.3(Apr 28, 2021)

  • 2.0.2(Apr 28, 2021)

  • 2.0.1(Apr 26, 2021)

  • 2.0.0(Apr 24, 2021)

    Now analogWrite can assign a pin and contol PWM duty value, frequency, resolution and phase all from one function. This function now returns the PWM frequency reported from the ledc methods.

    Source code(tar.gz)
    Source code(zip)
  • 1.2.1(Apr 22, 2021)

    When using ESP32S2 devices, this version offers a temporary fix for ESP32-S2 PWM for a Servo pulse issue #5050 but with limited frequency range. Tested range is 8-bit: 4Hz to 2.5kHz, 13-bit 0.2Hz to 120Hz

    Source code(tar.gz)
    Source code(zip)
  • 1.2.0(Apr 21, 2021)

    Arduino's reference for analogWrite() describes the PWM wave characteristics for various hardware architecture. The general operational characteristic is 8-bit duty cycle control where the output will be always off for value 0 and always on for value 255. With the various devices and timer modes, sometimes a bit correction is required to achieve full off or on. The ESP8266 follows this mode of operation, but with the different timer architecture on the ESP32 devices, the LEDc PWM operates in a different manner, where duty value 0 is always off, but duty value 255 will give an output that's 255/256 duty cycle (not fully on). This happens for any setting for bit resolution. As of this version 1.2.0, this condition is detected and corrected, where the hardware is programmed with 2^resolution (bits)^, which drives the output signal fully on.

    Source code(tar.gz)
    Source code(zip)
  • 1.1.0(Apr 19, 2021)

  • 1.0.0(Apr 14, 2021)

Owner
Interests in anything from electrical to electronic.
null
Control Heidelberg Wallbox Energy Control over WiFi using ESP8266 and configure your own local load management

< scroll down for English version and additional information > wbec WLAN-Anbindung der Heidelberg WallBox Energy Control über ESP8266 Die Heidelberg W

null 95 Jan 3, 2023
A distribution of the cFS that includes the cfe-eds-framework which includes NASA's core Flight Executive(cFE) and CCSDS Electronic Data Sheets(EDS) support.

core Flight System(cFS) Application Toolkit(cFSAT) - Beta Release A distribution of the cFS that includes the cfe-eds-framework which includes NASA's

OpenSatKit 13 Jul 3, 2022
WinChipHead CH341 linux driver for I2C / SPI and GPIO mode

WinChipHead (沁恒) CH341 linux driver for I2C / SPI and GPIO mode The CH341 is declined in several flavors, and may support one or more of UART, SPI, I2

Frank Zago 22 Dec 20, 2022
Calido - Open Smart Thermostat and Smart Home Controller. Built on a Thingy:91 (nRF9160).

Calido - Open Smart Thermostat and Smart Home Controller based on a Nordic Semiconductor Thingy:91 Project can be found here (Electromaker.io). A Make

ticccco 3 Jun 25, 2022
Phasmer: A FastK K-mer phase chaining preprocessor

Phasmer: A FastK K-mer phase chaining preprocessor Author: Haynes Heaton, Richard Durbin, Gene Myers First: April 5, 2021 This is a repository under i

Eugene W Myers Jr 9 Feb 4, 2022
The movements of your RC vehicles are jerky and not smooth? This Arduino device will solve this issue by adding acceleration and deceleration ramps to the PWM signals!

This is an Arduino Pro Mini 3.3V / 8MHz based RC servo ramp / delay generator Features: 4 RC servo PWM inputs and outputs (can be enhanced) Reads the

null 4 Apr 15, 2022
CRServoF - The CSRF serial protocol to PWM servo converter

CRServoF - The CSRF serial protocol to PWM servo converter I wanted to create a small project to mess around with PWM servo output for ExpressLRS, and

Bryan Mayland 107 Dec 28, 2022
custom esp8266 controller for driving the pwm led controller

room8266 custom esp8266 controller for driving the pwm led controller designed to drive this: https://github.com/austinscreations/PWM-LED-Controller t

null 1 Nov 1, 2021
Embox is a configurable RTOS designed for resource constrained and embedded systems

Embox is a configurable RTOS designed for resource constrained and embedded systems. Embox main idea is using Linux software without Linux.

Embox 877 Dec 28, 2022
Tiny implementation of the GNU/Linux CGroupFS (sans resource controllers) as a PUFFS or FUSE filesystem for BSD platforms

CGrpFS CGrpFS is a tiny implementation of the GNU/Linux CGroup filesystem for BSD platforms. It takes the form of a either a PUFFS or FUSE filesystem,

null 13 Nov 8, 2022
Harsh Badwaik 1 Dec 19, 2021
Bobby Cooke 328 Dec 25, 2022
Budgie Control Center is a fork of GNOME Control Center for the Budgie 10 Series.

Budgie Control Center Budgie Control Center is a fork of GNOME Settings / GNOME Control Center with the intent of providing a simplified list of setti

Buddies of Budgie 14 Dec 12, 2022
ESP32-Skid-Steer - Bruder Catepillar Skid Steer model converted to RC, controlled by an ESP32 with 2 analog joysticks and a receiver that is an ESP32 on the model.

ESP32-Skid-Steer Bruder Catepillar Skid Steer model converted to RC, controlled by an ESP32 with 2 analog joysticks and a receiver that is an ESP32 on

null 6 Oct 27, 2022
ESP32 firmware to read and control EMS and Heatronic compatible equipment such as boilers, thermostats, solar modules, and heat pumps

EMS-ESP is an open-source firmware for the Espressif ESP8266 and ESP32 microcontroller that communicates with EMS (Energy Management System) based equipment from manufacturers like Bosch, Buderus, Nefit, Junkers, Worcester and Sieger.

EMS-ESP 274 Jan 8, 2023
Hobbyist Operating System targeting x86_64 systems. Includes userspace, Virtual File System, An InitFS (tarfs), Lua port, easy porting, a decent LibC and LibM, and a shell that supports: piping, file redirection, and more.

SynnixOS Epic Hobby OS targeting x86_64 CPUs, it includes some hacked together functionality for most essential OSs although, with interactivity via Q

RaidTheWeb 42 Oct 28, 2022
3D printer control board based on ESP32,support 8 Driver motors.

PandaZHU use ESP32 as the mcu for 3D printer motherboard. Zhu is Chinese for bamboo it has larger memory and more powerful than normal 32bit 3D printe

Mark 48 Dec 31, 2022
ESP32-CAM with LVGL Speech/Face Recognition IR Control

ESP_MASTER 视频介绍:https://www.bilibili.com/video/BV1SM4y1V7Yb This is a comprehensive project that combines the powerful computing capabilities of ESP32

Kevincoooool 198 Jan 5, 2023
Bluetooth Gateway for Phantom Remote Control based on ESP32

Phantom remote control Bluetooth gateway An ESP3232 firmware for the gateway of Phantom remote control, which can push the temperature and humidity data of Phantom remote control through LAN, and also support to control Phantom remote control to send and receive IR data through LAN.

George Zhao 14 Nov 3, 2022