Kolban's Book on ESP32
معرفی کتاب «Kolban's Book on ESP32» نوشتهٔ Arturo Aguilar Márquez، Fabián Valapai Bravo Vázquez، Herman Aurelio Gallegos Ruiz، Miguel Cerón Villegas، Ricardo Reyes Figueroa و Neil Kolban، منتشرشده توسط نشر 2018 در سال 2018. این کتاب در فرمت pdf، زبان انگلیسی ارائه شده است.
I've been working in the software business for over 30 years but until recently, hadn't been playing directly with Micro Processors. When I bought a Raspberry PI and then an Arduino, I'm afraid I got hooked. In my house I am surrounded by computers of all shapes, sizes and capacities ... any one of them with orders of magnitude more power than any of these small devices ... however, I still found myself fascinated. When I stumbled across the ESP32 earlier this year, it piqued my interest. I hadn't touched C programming in decades (I'm a Java man these days). As I started to read what was available in the way of documentation from the excellent community surrounding the device, I found that there were only small pockets of knowledge. The best source of information was (and still is) the official PDFs for the SDK from Espressif (the makers of the ESP32) but even that is quite "light" on examples and background. As I studied the device, I started to make notes and my pages of notes continued to grow and grow. This book is my collated and polished version of those notes. Rather than keep them to myself, I offer them to all of us in the ESP32 community in the hope that they will be of some value. My plan is to continue to update this work as we all learn more and share what we find in the community forums. As such, I will re-release the work at regular intervals so please check back at the book's home page for the latest. Introduction Important Documentation Notes – ESP8266 and ESP32 Overview The ESP32 The ESP32 specification ESP32 variants Modules ESP-WROOM-32 ESP32-DevKitC ESP-WROVER-KIT The SparkFun ESP32 thing Connecting to the ESP32 Assembling circuits USB to UART converters Breadboards Power Multi-meter / Logic probe / Logic Analyzer Sundry components Physical construction Configuration for flashing the device Programming for ESP32 Espressif IoT Development framework Application entry point How ESP-IDF works Error handling The build environment menu configuration Adding a custom ESP-IDF component Working with memory Compiling Compilation Flashing Loading a program Programming environments Compilation tools xntensa-esp32-elf-ar esptool xtensa-esp32-elf-gcc gen_appbin.py make xtensa-esp32-elf-strip xtensa-esp32-elf-nm xtensa-esp32-elf-objcopy xtensa-esp32-elf-objdump xxd Linking Sizes of images Debugging ESP-IDF logging Exception handling Address to source line Core dump processing Using a debugger (GDB) OpenOCD and JTAG Using the ESP-WROVER-KIT for JTAG Port numbers for openocd Dumping IP Addresses Debugging and testing TCP and UDP connections Android – Socket Protocol Android – UDP Sender/Receiver Android – tPacketCapture Windows – Hercules SocketTest Linux – netcat (nc) Curl Eclipse – TCP/MON httpbin.org RequestBin tcpdump ESP-IDF component debugging LWIP Run a Blinky WiFi subsystem WiFi Theory Initializing the WiFi environment Setting the operation mode Scanning for access points Handling WiFi events Station configuration Starting up the WiFi environment Connecting to an access point Being an access point Working with connected stations WiFi at boot time The DHCP client The DHCP server Current IP Address, netmask and gateway WiFi Protected Setup – WPS Designs for bootstrapping WiFi Tools for WiFi on Linux iwlist iw Working with TCP/IP The Lightweight IP Stack – lwip TCP TCP/IP Sockets Handling errors Configuration settings Using select() Differences from "standard" sockets UDP/IP Sockets TLS, SSL and security Keys files PEM files mbedTLS client app structure mbedTLS client example mbedTLS server app structure mbedTLS Debugging OpenSSL RSA encryption/decryption Generate DER data containing a private key Name Service Multicast Domain Name Systems mDNS API programming Installing Bonjour Avahi Working with SNTP Java Sockets Network performance tests Bluetooth Bluetooth specification Bluetooth UUIDs Bluetooth GAP Low level packet GAP Advertizing data Advertisability – limited and general Directed advertising Non-connectable advertising Filtering devices Performing a scan Performing advertising Bluetooth GATT GATT Characteristic Being a GATT client Being a GATT Server Notifications and indications GATT XML descriptions Service Discovery Protocol ESP32 and Bluetooth GATT Server – Read request Debugging ESP32 Bluetooth Bluetooth C Programming in Linux hci_get_route hci_open_dev hci_inquiry hci_read_remote_name str2ba ba2str Bluetooth programming in Node.js Using Noble Using Bleno Bluetooth Audio Bluetooth RFCOMM Bluetooth tools l2ping rfcomm bluetoothctl hciconfig hcidump hcitool gatttool Bluetooth examples The iTag peripheral Smart Watch / The TW64 Band Web Bluetooth The Physical Web BLE beacons Hardware interfacing GPIOs Pull up and pull down settings GPIO Interrupt handling Expanding the number of available GPIOs PCF8574 PCF8575 MCP23017 Interrupt Service Routines – ISRs Working with I2C Using the ESP-IDF I2C driver Common I2C devices Working with SPI – Serial Peripheral Interface Using the ESP-IDF SPI driver The Arduino Hardware Abstraction Layer SPI Common SPI devices Working with UART/serial Using the VFS component with serial I2S Bus I2S – Camera I2S – LCD I2S – DMA Interrupts RMT – The Remote Peripheral Timers and time LEDC – Pulse Width Modulation – PWM Automated PWM fading Analog to digital conversion Digital to analog conversion Sleep modes Security Working with flash memory Working with RAM memory RAM Utilization Heap constructions and management Heap diagnosis / memory leaks Heap corruption Using PSRAM EFUSE EFuse #1 EFuse #2 EFuse #3 – 0x6001a00c Button press detection GPS GPS decoding Temperature and pressure – BMP180 Using the Arduino APIs Temperature and pressure – BME280 NeoPixels NeoPixel theory NeoPixels and the ESP32 APA102 LED 7-Segment displays MAX7219/MAX7221 – Serial interface, 8-digit, led display drivers The U8g2 library LCD display – Nokia 5110 – PCD8544 OLED 128x32, 128x64 – SSD1306 TFT displays Ambient light level sensor – BH1750FVI Ambient light and proximity sensor Infrared receivers RFID MFRC522 MFRC522 – Low levels Initialization AntennaOn Cameras Ivan's sample OV7670 Accelerometer and Gyroscope – MPU-6050 (aka GY-521) The math of accelerometers Visualizing orientation Compass – HMC5883L (aka GY-271) (aka CJ-M49) Tilt compensation of the compass Real time clocks Servos The Mini/Micro SG90 Audio PCM5102 – I2S DAC Graphic Equalizer External networking The nRF24 Using the Arduino APIs Integrating the nRF24 with the ESP32 Programming using Eclipse Installing the Eclipse Serial terminal Web development using Eclipse Programming using the Arduino IDE Mapping from the Arduino to the ESP32 Implications of Arduino IDE support Installing the Arduino IDE with ESP32 support Using the Arduino libraries as an ESP-IDF component Tips for working in the Arduino environment Initialize global classes in setup() Invoking Espressif SDK API from a sketch Reasons to consider using Eclipse over Arduino IDE Programming with JavaScript Duktape Compiling code Building for ESP32 Integrating Duktape in an ESP32 application The Duktape stack Working with object properties Calling C from a JavaScript program JerryScript Platform specific files JerryScript life-cycle Accessing the global environment The jerry_value_t Handling errors Interfacing JerryScript with C IoT.js Programming with Python Pycom Micropython Programming with Lua Lua-RTOS for ESP32 Integration with Web Apps HTTP Protocol HTTP Headers Accept header Authorization header Connection header Content-Length header Content-Type header Host header User-Agent header Web Servers Mongoose networking library Setting up Mongoose on an ESP32 Sending a request from Mongoose The Mongoose struct mg_connection Handling file uploads GoAhead Web Server JavaScript Webserver REST Services REST protocol ESP32 as a REST client Making a REST request using Curl Making a REST request using Mongoose ESP32 as a REST service provider WebSockets A WebSocket browser app Mongoose WebSocket Other Websocket implementations Tasker AutoRemote DuckDNS Networking protocols MQTT Mosquitto MQTT Installing on Windows Writing ESP32 MQTT clients Using Mongoose as an MQTT client Using Espruino as an MQTT client Writing non ESP32 MQTT clients Eclipse paho C – Mosquitto client library Node.js JavaScript – MQTT Browser JavaScript – MQTT CoAP – Constrained Application Protocol FTP TFTP Telnet DNS Protocol Mobile apps Blynk Cloud environments IBM Bluemix If This Then That – IFTTT ESP Mesh Storage programming Partition table Non Volatile Storage Virtual File System VFS Implementations FATFS File System Spiffs File System Building SPIFFs for the ESP32 mkspiffs tool The ESP File System – EspFs SD, MMC and SDIO interfacing SD attachment on Wrover Dev Kit ZIP files zlib miniz kuba--/zip Charting data Kst Sample Snippets Sample applications Sample – Ultrasonic distance measurement Sample – WiFi Scanner Sample – A changeable mood light Using FreeRTOS The architecture of a task in FreeRTOS Priorities and FreeRTOS tasks Stacks and FreeRTOS tasks Timers in FreeRTOS Blocking and synchronization within FreeRTOS Semaphores and Mutices within FreeRTOS Queues within FreeRTOS Ring buffer within FreeRTOS Working with queue sets Monitoring capabilities Running untested functions The Serial AT command processor Mongoose OS The Mongoose OS file system Setting up Mongoose OS WiFi Building a Mongoose OS App AWS IoT The ESP-IDF aws_iot component Google IoT Creating a Google Cloud IoT device registry MQTT connections to Google IoT Using the TI CC2650 SensorTag IR Temperature Sensor Humidity Service Ambient light sensor Key Press Developing solutions on Linux Building a Linux environment Hardware architecture The CPU and cores Intrinsic data types Native byte order, endian and network byte order Memory mapping and address spaces Reading and writing registers Pads and multiplexing Register based GPIO GPIO_OUT_REG GPIO_OUT_W1TS_REG GPIO_OUT_W1TC_REG GPIO_OUT1_REG GPIO_OUT1_W1TS_REG GPIO_OUT1_W1TC_REG GPIO_ENABLE_REG GPIO_ENABLE_W1TS_REG GPIO_ENABLE_W1TC_REG GPIO_ENABLE1_REG GPIO_ENABLE1_W1TS_REG GPIO_ENABLE1_W1TC_REG GPIO_STRAP_REG GPIO_IN_REG GPIO_IN1_REG GPIO_STATUS_REG GPIO_STATUS_W1TS_REG GPIO_STATUS_W1TC_REG GPIO_STATUS1_REG GPIO_STATUS1_W1TS_REG GPIO_STATUS1_W1TC_REG GPIO_PCPU_NMI_INT1_REG GPIO_PCPU_NMI_INT1_REG GPIO_PINn_REG GPIO_FUNCm_IN_SEL_CFG_REG GPIO_FUNCn_OUT_SEL_CFG_REG IO_MUX_x_REG Strapping pins Boot mode source Debugging on U0TX0 at boot Timing of SDIO slave Bootloader Power modes Peripherals Remote Control Peripheral – RMT SPI PID Controller UART I2S Peripheral I2S Input Data I2S Clock Camera mode Registers I2S_CONF_REG I2S_CONF2_REG I2S_CLKM_CONF_REG I2S_CONF_CHAN_REG I2S_LC_CONF_REG I2S_FIFO_CONF_REG I2S_IN_LINK_REG I2S_RXEOF_NUM_REG I2S_CONF_CHAN_REG I2S_SAMPLE_RATE_CONF_REG I2S_INT_RAW_REG I2S_INT_ENA_REG I2S_INT_CLR_REG RTC RTCIO_RTC_GPIO_OUT_DATA RTCIO_RTC_GPIO_OUT_DATA_W1TS RTCIO_RTC_GPIO_OUT_DATA_W1TC RTCIO_RTC_GPIO_ENABLE RTCIO_RTC_GPIO_ENABLE_W1TS RTCIO_RTC_GPIO_ENABLE_W1TC RTCIO_RTC_GPIO_STATUS_INT RTCIO_RTC_GPIO_STATUS_INT_W1TS RTCIO_RTC_GPIO_STATUS_INT_W1TC RTCIO_RTC_GPIO_IN_NEXT RTCIO_RTC_GPIO_PINn_WAKEUP_ENABLE RTCIO_RTC_GPIO_PINn_INT_TYPE RTCIO_RTC_GPIO_PINn_PAD_DRIVER RTCIO_DIG_PAD_HOLD_REG RTCIO_HALL_XPD_HALL RTCIO_HALL_PHASE RTCIO_SENSOR_SENSEn_HOLD RTCIO_SENSOR_SENSEn_MUX_SEL RTCIO_SENSOR_SENSEn_FUN_SEL RTCIO_SENSOR_SENSEn_SLP_SEL RTCIO_SENSOR_SENSEn_SLP_IE RTCIO_SENSOR_SENSEn_FUN_IE RTCIO_ADC_ADCn_HOLD RTCIO_ADC_ADCn_MUX_SEL RTCIO_ADC_ADCn_FUN_SEL RTCIO_ADC_ADCn_SLP_SEL RTCIO_ADC_ADCn_SLP_IE RTCIO_ADC_ADCn_FUN_IE RTCIO_PAD_PDAC1_DRV RTCIO_PAD_PDAC1_HOLD RTCIO_PAD_PDAC1_RDE RTCIO_PAD_PDAC1_RUE RTCIO_PAD_PDAC1_DAC RTCIO_PAD_PDAC1_XPD_DAC RTCIO_PAD_PDAC1_MUX_SEL RTCIO_PAD_PDAC1_FUN_SEL RTCIO_PAD_PDAC1_SLP_SEL RTCIO_PAD_PDAC1_SLP_IE RTCIO_PAD_PDAC1_SLP_OE RTCIO_PAD_PDAC1_FUN_IE RTCIO_PAD_PDAC1_DAC_XPD_FORCE ULP Processor Preparing a ULP co-processor environment ULP Instruction set NOP – No operation ADD – Add to a register SUB – Subtract from register AND – Logical AND of two operands OR – Logical OR of two operands LSH – Logical Shift Left RSH – Logical Shift Right MOVE – Move to register ST – Store data to memory LD – Load data from memory JUMP – Jump to an absolute address JUMPR – Jump relative with condition JUMPS – Jump relative based on stage count STAGE_RST – Reset the stage count register STAGE_INC – Increment the stage count register STAGE_DEC – Decrement the stage count register HALT – End the program WAKE – Wakeup the chip SLEEP – Set the ULP wakeup timer period WAIT – Wait some number of cycles TSENS – Do measurement with the temperature sensor ADC – Do measurement with ADC REG_RD – Read from peripheral register REG_WR – Write to peripheral register ULP co-processor assembler coding Loading and starting a ULP co-processor application Waking up the ULP co-processor Peripheral registers for ULP co-processor SENS_ULP_CP_SLEEP_CYC0_REG SENS_ULP_CP_SLEEP_CYC1_REG SENS_ULP_CP_SLEEP_CYC2_REG SENS_ULP_CP_SLEEP_CYC3_REG SENS_ULP_CP_SLEEP_CYC4_REG SENS_SAR_START_FORCE_REG Electronics Transistors as switches Logic Level Shifting Projects JerryScript library for ESP32 The "require" capability API Reference Configuration, status and operational retrieval Arduino Mapping bitRead bitWrite delay digitalWrite pinMode SPI.begin SPI.setBitOrder SPI.setClockDivider SPI.setDataMode SPI.transfer Wire.begin Wire.beginTransmission Wire.endTransmission Wire.read Wire.requestFrom Wire.write FreeRTOS API reference portENABLE_INTERRUPTS portDISABLE_INTERRUPTS xPortGetCoreID pvPortMalloc pvPortFree xPortGetFreeHeapSize() xEventGroupClearBits xEventGroupCreate xEventGroupCreateStatic vEventGroupDelete xEventGroupSetBits xEventGroupWaitBits xQueueAddToSet xQueueCreate xQueueCreateSet xQueueCreateStatic vQueueDelete xQueueGenericReceive uxQueueMessagesWaiting xQueueOverwrite xQueuePeek xQueuePeekFromISR xQueueReceive xQueueReceiveFromISR xQueueRemoveFromSet xQueueReset xQueueSelectFromSet xQueueSelectFromSetFromISR xQueueSend xQueueSendFromISR xQueueSendToBack xQueueSendToBackFromISR xQueueSendToFront xQueueSendToFrontFromISR uxQueueSpacesAvailable xRingbufferAddToQueueSetRead xRingbufferAddToQueueSetWrite xRingbufferCreate vRingbufferDelete xRingbufferGetMaxItemSize xRingBufferPrintInfo xRingbufferReceive xRingbufferReceiveFromISR xRingbufferReceiveUpTo xRingbufferReceiveUpToFromISR xRingbufferRemoveFromQueueSetRead xRingbufferRemoveFromQueueSetWrite vRingbufferReturnItem vRingbufferReturnItemFromISR xRingbufferSend xRingbufferSendFromISR vSemaphoreCreateBinary xSemaphoreCreateCounting xSemaphoreCreateMutex vSemaphoreDelete uxSemaphoreGetCount xSemaphoreGive xSemaphoreGiveFromISR xSemaphoreTake xTaskCreate xTaskCreatePinnedToCore vTaskDelay vTaskDelayUntil vTaskDelete taskDISABLE_INTERRUPTS taskENABLE_INTERRUPTS vTaskGetInfo xTaskGetCurrentTaskHandle pcTaskGetTaskName uxTaskGetNumberOfTasks uxTaskGetSnapshotAll uxTaskGetStackHighWaterMark pxTaskGetStackStart eTaskGetState uxTaskGetSystemState xTaskGetTickCount xTaskGetTickCountFromISR vTaskList uxTaskPriorityGet uxTaskPriorityGetFromISR vTaskPrioritySet vTaskResume vTaskResumeFormISR xTaskResumeAll vTaskResumeFromISR vTaskSuspend vTaskSuspendAll xTimerChangePeriod xTimerChangePeriodFromISR xTimerCreate xTimerCreateStatic xTimerDelete pcTimerGetName xTimerGetExpiryTime xTimerGetPeriod pvTimerGetTimerDaemonTaskHandle pvTimerGetTimerID xTimerIsTimerActive xTimerPendFunctionCall xTimerPendFunctionCallFromISR xTimerReset xTimerResetFromISR vTimerSetTimerID xTimerStart xTimerStartFromISR xTimerStop xTimerStopFromISR List Processing vListInitialise vListInitialiseItem vListInsert vListInsertEnd Sockets APIs accept bind close closesocket connect fcntl freeaddrinfo getaddrinfo gethostbyname gethostbyname_r getpeername getsockname getsockopt htonl htons inet_ntop inet_pton ioctlsocket listen read recv recvfrom select send sendmsg sendto setsockopt shutdown socket write writev Socket data structures Sockets – struct sockaddr Sockets – struct sockaddr_in Working with WiFi DNS dns_getserver dns_setserver System Functions esp_chip_info esp_cpu_in_ocd_debug_mode esp_deregister_freertos_idle_hook esp_deregister_freertos_tick_hook esp_efuse_read_mac esp_get_free_heap_size esp_get_idf_version esp_ipc_call esp_ipc_call_blocking esp_random esp_register_freertos_idle_hook esp_register_freertos_idle_hook_for_cpu esp_register_freertos_tick_hook esp_register_freertos_tick_hook_for_cpu esp_restart esp_sleep_get_wakeup_cause ets_delay_us system_rtc_mem_write rtc_get_reset_reason software_reset software_reset_cpu system_deep_sleep system_get_time system_restore system_rtc_mem_read system_rtc_mem_write system_rtc_mem_read WiFi esp_event_loop_init esp_event_loop_set_cb esp_wifi_ap_get_sta_list esp_wifi_clear_fast_connect esp_wifi_connect esp_wifi_deauth_sta esp_wifi_deinit esp_wifi_disconnect esp_wifi_free_station_list esp_wifi_get_auto_connect esp_wifi_get_bandwidth esp_wifi_get_channel esp_wifi_get_config esp_wifi_get_country esp_wifi_get_event_mask esp_wifi_get_mac esp_wifi_get_mode esp_wifi_get_promiscuous esp_wifi_get_protocol esp_wifi_get_ps esp_wifi_get_station_list esp_wifi_init esp_wifi_restore esp_wifi_reg_rxcb esp_wifi_scan_get_ap_records esp_wifi_scan_get_ap_num esp_wifi_scan_start esp_wifi_scan_stop esp_wifi_set_auto_connect esp_wifi_set_bandwidth esp_wifi_set_channel esp_wifi_set_config esp_wifi_set_country esp_wifi_set_event_mask esp_wifi_set_mac esp_wifi_set_mode esp_wifi_set_promiscuous_rx_cb esp_wifi_set_promiscuous esp_wifi_set_protocol esp_wifi_set_ps esp_wifi_set_storage esp_wifi_set_vendor_ie esp_wifi_set_vendor_ie_cb esp_wifi_sta_get_ap_info esp_wifi_start esp_wifi_stop WiFi WPS wifi_wps_enable wifi_wps_disable wifi_wps_start wifi_set_wps_cb mbed TLS mbedtls_ctr_drbg_free mbedtls_ctr_drbg_init mbedtls_ctr_drbg_seed mbedtls_debug_set_threshold mbedtls_entropy_free mbedtls_entropy_init mbedtls_net_accept mbedtls_net_bind mbedtls_net_connect mbedtls_net_free mbedtls_net_init mbedtls_net_recv mbedtls_net_recv_timeout mbedtls_net_send mbedtls_net_set_block mbedtls_net_set_nonblock mbedtls_pk_decrypt mbedtls_pk_encrypt mebdlts_pk_free mebdtls_pk_get_len mbedtls_pk_get_name mbedtls_pk_info_from_type mbedtls_pk_init mbedtls_pk_parse_key mbedtls_pk_rsa_context mbedtls_pk_setup mbedtls_pk_write_key_der mbedtls_pk_write_key_pem mbedtls_pk_write_pubkey_der mbedtls_pk_write_pubkey_pem mbedtls_printf mbedtls_sha1 mbedlts_rsa_check_privkey mbedtls_rsa_check_pubkey mbedtls_rsa_free mbedtls_rsa_gen_key mbedtls_rsa_init mbedtls_rsa_pkcs_encrypt mbedtls_ssl_close_notify mbedtls_ssl_conf_authmode mbedtls_ssl_conf_ca_chain mbedtls_ssl_conf_dbg mbedtls_ssl_conf_rng mbedtls_ssl_config_defaults mbedtls_ssl_config_free mbedtls_ssl_config_init mbedtls_ssl_free mbedtls_ssl_get_verify_result mbedtls_ssl_handshake mbedtls_ssl_init mbedtls_ssl_read mbedtls_ssl_session_reset mbedtls_ssl_set_bio mbedtls_ssl_set_hostname mbedtls_ssl_setup mbedtls_ssl_write mbedtls_strerror mbedtls_x509_crt_init mbedtls_x509_crt_parse mbedtls_x509_crt_veryify_info ESP-TLS esp_tls_conn_delete esp_tls_conn_http_new esp_tls_conn_new esp_tls_conn_read esp_tls_conn_write Bluetooth LE esp_bt_uuid_t esp_attr_value_t esp_gatt_id_t esp_gatt_srvc_id_t esp_gatt_status_t esp_gattc_char_elem_t esp_gattc_db_elem_t esp_gattc_descr_elem_t esp_gattc_service_elem_t esp_ble_gap_config_adv_data esp_ble_gap_config_adv_data_raw esp_ble_gap_config_scan_rsp_data_raw esp_ble_gap_config_local_privacy esp_ble_gap_disconnect esp_ble_gap_get_whitelist_size esp_ble_gap_read_rssi esp_ble_gap_register_callback ESP_GAP_BLE_ADD_WHITELIST_COMPLETE_EVT ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT ESP_GAP_BLE_ADV_DATA_RAW_SET_COMPLETE_EVT ESP_GAP_BLE_ADV_START_COMPLETE_EVT ESP_GAP_BLE_ADV_STOP_COMPLETE_EVT ESP_GAP_BLE_AUTH_CMPL_EVT ESP_GAP_BLE_CLEAR_BOND_DEV_COMPLETE_EVT ESP_GAP_BLE_GET_BOND_DEV_COMPLETE_EVT ESP_GAP_BLE_KEY_EVT ESP_GAP_BLE_LOCAL_ER_EVT ESP_GAP_BLE_LOCAL_IR_EVT ESP_GAP_BLE_NC_REQ_EVT ESP_GAP_BLE_OOB_REQ_EVT ESP_GAP_BLE_PASSKEY_NOTIF_EVT ESP_GAP_BLE_PASSKEY_REQ_EVT ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT ESP_GAP_BLE_REMOVE_BOND_DEV_COMPLETE_EVT ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT ESP_GAP_BLE_SCAN_RESULT_EVT ESP_GAP_BLE_SCAN_RSP_DATA_RAW_SET_COMPLETE_EVT ESP_GAP_BLE_SCAN_RSP_DATA_SET_COMPLETE_EVT ESP_GAP_BLE_SCAN_START_COMPLETE_EVT ESP_GAP_BLE_SCAN_STOP_COMPLETE_EVT ESP_GAP_BLE_SEC_REQ_EVT ESP_GAP_BLE_SET_LOCAL_PRIVACY_COMPLETE_EVT ESP_GAP_BLE_SET_PKT_LENGTH_COMPLETE_EVT ESP_GAP_BLE_SET_STATIC_RAND_ADDR_EVT ESP_GAP_BLE_UPDATE_CONN_PARAMS_EVT esp_ble_gap_security_rsp esp_ble_gap_set_device_name esp_ble_set_encryption esp_ble_gap_set_pkt_data_len esp_ble_gap_set_prefer_conn_params esp_ble_gap_set_rand_addr esp_ble_gap_set_security_param esp_ble_gap_set_scan_params esp_ble_gap_start_advertising esp_ble_gap_start_scanning esp_ble_gap_stop_advertising esp_ble_gap_stop_scanning esp_ble_gap_update_conn_params esp_ble_gap_update_whitelist esp_ble_gattc_app_register esp_ble_gattc_app_unregister esp_ble_gattc_close esp_ble_gattc_cache_refresh esp_ble_gattc_config_mtu esp_ble_gattc_execute_write esp_ble_gattc_get_all_char esp_ble_gattc_get_all_descr esp_ble_gattc_get_attr_count esp_ble_gattc_get_char_by_uuid esp_ble_gattc_get_characteristic esp_ble_gattc_get_db esp_ble_gattc_get_descr_by_char_handle esp_ble_gattc_get_descr_by_uuid esp_ble_gattc_get_descriptor esp_ble_gattc_get_include_service esp_ble_gattc_get_included_service esp_ble_gattc_get_service esp_ble_gattc_open esp_ble_gattc_prepare_write esp_ble_gattc_prepare_write_char_descr esp_ble_gattc_read_char esp_ble_gattc_read_char_descr esp_ble_gattc_read_multiple esp_ble_gattc_register_callback ESP_GATTC_ACL_EVT ESP_GATTC_ADV_DATA_EVT ESP_GATTC_ADV_VSC_EVT ESP_GATTC_BTH_SCAN_CFG_EVT ESP_GATTC_BTH_SCAN_DIS_EVT ESP_GATTC_BTH_SCAN_ENB_EVT ESP_GATTC_BTH_SCAN_PARAM_EVT ESP_GATTC_BTH_SCAN_RD_EVT ESP_GATTC_BTH_SCAN_THR_EVT ESP_GATTC_CANCEL_OPEN_EVT ESP_GATTC_CFG_MTU_EVT ESP_GATTC_CLOSE_EVT ESP_GATTC_CONGEST_EVT ESP_GATTC_CONNECT_EVT ESP_GATTC_DISCONNECT_EVT ESP_GATTC_ENC_CMPL_CB_EVT ESP_GATTC_EXEC_EVT ESP_GATTC_GET_CHAR_EVT ESP_GATTC_GET_DESCR_EVT ESP_GATTC_GET_INCL_SRVC_EVT ESP_GATTC_MULT_ADV_DATA_EVT ESP_GATTC_MULT_ADV_DIS_EVT ESP_GATTC_MULT_ADV_ENB_EVT ESP_GATTC_MULT_ADV_UPD_EVT ESP_GATTC_NOTIFY_EVT ESP_GATTC_OPEN_EVT ESP_GATTC_PREP_WRITE_EVT ESP_GATTC_READ_CHAR_EVT ESP_GATTC_READ_DESC_EVT ESP_GATTC_REG_EVT ESP_GATTC_REG_FOR_NOTIFY_EVT ESP_GATTC_SEARCH_CMPL_EVT ESP_GATTC_SEARCH_RES_EVT ESP_GATTC_SCAN_FLT_CFG_EVT ESP_GATTC_SCAN_FLT_PARAM_EVT ESP_GATTC_SCAN_FLT_STATUS_EVT ESP_GATTC_SRVC_CHG_EVT ESP_GATTC_UNREG_EVT ESP_GATTC_UNREG_FOR_NOTIFY_EVT ESP_GATTC_WRITE_CHAR_EVT esp_ble_gattc_register_for_notify esp_ble_gattc_unregister_for_notify esp_ble_gattc_search_service esp_ble_gattc_write_char esp_ble_gattc_write_char_descr esp_ble_gatts_add_char esp_ble_gatts_add_char_descr esp_ble_gatts_add_included_service esp_ble_gatts_app_register esp_ble_gatts_app_unregister esp_ble_gatts_close esp_ble_gatts_create_attribute_tab esp_ble_gatts_create_service esp_ble_gatts_delete_service esp_ble_gatts_get_attr_value esp_ble_gatts_open esp_ble_gatts_register_callback ESP_GATTS_ADD_CHAR_DESCR_EVT ESP_GATTS_ADD_CHAR_EVT ESP_GATTS_ADD_INCL_SRVC_EVT ESP_GATTS_CANCEL_OPEN_EVT ESP_GATTS_CLOSE_EVT ESP_GATTS_CONF_EVT ESP_GATTS_CONGEST_EVT ESP_GATTS_CONNECT_EVT ESP_GATTS_CREAT_ATTR_TAB_EVT ESP_GATTS_CREATE_EVT ESP_GATTS_DELETE_EVT ESP_GATTS_DISCONNECT_EVT ESP_GATTS_EXEC_WRITE_EVT ESP_GATTS_LISTEN_EVT ESP_GATTS_MTU_EVT ESP_GATTS_OPEN_EVT ESP_GATTS_READ_EVT ESP_GATTS_REG_EVT ESP_GATTS_RESPONSE_EVT ESP_GATTS_SET_ATTR_VAL_EVT ESP_GATTS_START_EVT ESP_GATTS_STOP_EVT ESP_GATTS_UNREG_EVT ESP_GATTS_WRITE_EVT esp_ble_gatts_send_indicate esp_ble_gatts_send_response esp_ble_gatts_set_attr_value esp_ble_gatts_start_service esp_ble_gatts_stop_service esp_ble_resolve_adv_data esp_ble_tx_power_get esp_ble_tx_power_set esp_bluedroid_deinit esp_bluedroid_disable esp_bluedroid_enable esp_bluedroid_init esp_bt_controller_deinit esp_bt_controller_disable esp_bt_controller_enable esp_bt_controller_get_status esp_bt_controller_init esp_bt_controller_mem_release esp_bt_dev_get_address esp_bt_dev_set_device_name esp_vhci_host_check_send_available esp_vhci_host_register_callback esp_vhci_host_send_packet ESP MQTT esp_mqtt_client_destroy esp_mqtt_client_init esp_mqtt_client_publish esp_mqtt_client_set_uri esp_mqtt_client_start esp_mqtt_client_stop esp_mqtt_client_subscribe esp_mqtt_client_unsubscribe Mesh esp_mesh_allow_root_conflicts esp_mesh_available_txupQ_num esp_mesh_deinit esp_mesh_delete_group_id esp_mesh_get_ap_assoc_expire esp_mesh_get_ap_authmode esp_mesh_get_ap_connections esp_mesh_get_capacity_num esp_mesh_get_config esp_mesh_get_group_list esp_mesh_get_group_num esp_mesh_get_id esp_mesh_get_ie_crypto_key esp_mesh_get_layer esp_mesh_get_max_layer esp_mesh_get_parent_bssid esp_mesh_get_root_healing_delay esp_mesh_get_router esp_mesh_get_routing_table esp_mesh_get_routing_table_size esp_mesh_get_rx_pending esp_mesh_get_self_organized esp_mesh_get_total_node_num esp_mesh_get_tx_pending esp_mesh_get_type esp_mesh_get_vote_percentage esp_mesh_get_xon_qsize esp_mesh_init esp_mesh_is_my_group esp_mesh_is_root esp_mesh_post_toDS_state esp_mesh_recv esp_mesh_recv_toDS esp_mesh_send esp_mesh_set_ap_assoc_expire esp_mesh_set_ap_authmode esp_mesh_set_ap_connections esp_mesh_set_ap_password esp_mesh_set_capacity_num esp_mesh_set_config esp_mesh_set_event_cb esp_mesh_set_group_id esp_mesh_set_id esp_mesh_set_ie_crypto_funcs esp_mesh_set_ie_crypto_key esp_mesh_set_max_layer esp_mesh_set_root_healing_delay esp_mesh_set_router esp_mesh_set_self_organized esp_mesh_set_type esp_mesh_set_vote_percentage esp_mesh_set_xon_qsize esp_mesh_start esp_mesh_stop esp_mesh_waive_root Upgrade APIs system_upgrade_flag_check system_upgrade_flag_set system_upgrade_reboot system_upgrade_start system_upgrade_userbin_check Smart config APIs smartconfig_start smartconfig_stop SNTP API sntp_enabled sntp_getoperatingmode sntp_getserver sntp_getservername sntp_init sntp_servermode_dhcp sntp_setoperatingmode sntp_setserver sntp_setservername sntp_stop Generic TCP/UDP APIs ipaddr_addr IP4_ADDR IP2STR MAC2STR TCP Adapter APIs tcpip_adapter_ap_input tcpip_adapter_ap_start tcpip_adapter_create_ip6_linklocal tcpip_adapter_dhcpc_get_status tcpip_adapter_dhcpc_option tcpip_adapter_dhcpc_start tcpip_adapter_dhcpc_stop tcpip_adapter_dhcps_get_status tcpip_adapter_dhcps_option tcpip_adapter_dhcps_start tcpip_adapter_dhcps_stop tcpip_adapter_down tcpip_adapter_eth_input tcpip_adapter_eth_start tcpip_adapter_free_sta_list tcpip_adapter_get_esp_if tcpip_adapter_get_dns_info tcpip_adapter_get_hostname tcpip_adapter_get_ip_info tcpip_adapter_get_ip6_linklocal tcpip_adapter_get_netif tcpip_adapter_get_old_ip_info tcpip_adapter_get_sta_list tcpip_adapter_get_wifi_if tcpip_adapter_init tcpip_adapter_set_dns_info tcpip_adapter_set_hostname tcpip_adapter_set_ip_info tcpip_adapter_set_old_ip_info tcpip_adapter_sta_input tcpip_adapter_sta_start tcpip_adapter_start tcpip_adapter_stop tcpip_adapter_up mdns mdns_free mdns_init mdns_query mdns_query_end mdns_result_free mdns_result_get mdns_result_get_count mdns_service_add mdns_service_instance_set mdns_service_port_set mdns_service_remove mdns_service_remove_all mdns_service_txt_set mdns_set_hostname mdns_set_instance OTA esp_ota_begin esp_ota_end esp_ota_get_boot_partition esp_ota_get_next_update_partition esp_ota_get_running_partition esp_ota_set_boot_partition esp_ota_write esp_https_ota GPIO Driver gpio_config gpio_get_level gpio_install_isr_service gpio_intr_enable gpio_intr_disable gpio_isr_handler_add gpio_isr_handler_remove gpio_isr_register gpio_set_direction gpio_set_intr_type gpio_set_level gpio_set_pull_mode gpio_uninstall_isr_service gpio_wakeup_enable gpio_wakeup_disable GPIO Low Level gpio_init gpio_input_get gpio_input_get_high gpio_intr_ack gpio_intr_ack_high gpio_intr_handler_register gpio_intr_pending gpio_intr_pending_high gpio_matrx_in gpio_matrix_out gpio_output_set gpio_output_set_high gpio_pad_hold gpio_pad_pulldown gpio_pad_pullup gpio_pad_select_gpio gpio_pad_set_drv gpio_pad_unhold gpio_pin_wakeup_disable gpio_pin_wakeup_enable GPIO RTC rtc_gpio_init rtc_gpio_deinit rtc_gpio_get_level rtc_gpio_set_level rtc_gpio_set_direction rtc_gpio_pullup_en rtc_gpio_pulldown_en rtc_gpio_pullup_dis Interrupts esp_intr_alloc esp_intr_alloc_intrstatus esp_intr_disable esp_intr_enable esp_intr_free esp_intr_get_cpu esp_intr_get_intno esp_intr_mark_shared esp_intr_noniram_disable esp_intr_noniram_enable esp_intr_reserve esp_intr_set_in_iram Analog to Digital Conversion adc1_config_channel_atten adc1_config_width adc1_get_voltage hall_sensor_read Digital to Analog Conversion dac_i2s_disable dac_i2s_enable dac_output_disable dac_output_enable dac_output_voltage dac_pad_get_io_num UART driver API uart_clear_intr_status uart_disable_intr_mask uart_driver_delete uart_driver_install uart_disable_intr_mask uart_disable_pattern_det_intr uart_disable_rx_intr uart_disable_tx_intr uart_enable_intr_mask uart_enable_pattern_det_intr uart_enable_rx_intr uart_enable_tx_intr uart_flush uart_flush_input uart_get_baudrate uart_get_buffered_data_len uart_get_collision_flag uart_get_hw_flow_ctrl uart_get_parity uart_get_stop_bits uart_get_word_length uart_intr_config uart_isr_free uart_isr_register uart_param_config uart_pattern_get_pos uart_pattern_pop_pos uart_pattern_queue_reset uart_read_bytes uart_set_baudrate uart_set_dtr uart_set_hw_flow_ctrl uart_set_line_inverse uart_set_mode uart_set_parity uart_set_pin uart_set_rts uart_set_rx_timeout uart_set_stop_bits uart_set_sw_flow_ctrl uart_set_tx_ilde_num uart_set_word_length uart_tx_chars uart_wait_tx_done uart_write_bytes uart_write_bytes_with_break UART low level APIs uartAttach Uart_Init uart_div_modify uart_buff_switch uart_tx_switch uart_baudrate_detect uart_rx_one_char uart_tx_wait_idle uart_tx_flush uart_tx_one_char uart_tx_one_char2 I2C APIs i2c_cmd_link_create i2c_cmd_link_delete i2c_driver_delete i2c_driver_install i2c_get_data_mode i2c_get_data_timing i2s_get_period i2c_get_start_timing i2c_get_stop_timing i2c_isr_free i2c_isr_register i2c_master_cmd_begin i2c_master_read i2c_master_read_byte i2c_master_start i2c_master_stop i2c_master_write i2c_master_write_byte i2c_param_config i2c_reset_rx_fifo i2c_reset_tx_fifo i2c_set_data_mode i2c_set_data_timing i2c_set_period i2c_set_pin i2c_set_start_timing i2c_set_stop_timing i2c_slave_read_buffer i2c_slave_write_buffer SPI APIs spi_bus_add_device spi_bus_free spi_bus_initialize spi_bus_remove_device spi_device_get_trans_result spi_device_queue_trans spi_device_transmit I2S APIs i2s_adc_enable i2s_adc_disable i2s_driver_install i2s_driver_uninstall i2s_pop_sample i2s_push_sample i2s_read_bytes i2s_set_adc_mode i2s_set_clk i2s_set_dac_mode i2s_set_pin i2s_set_sample_rates i2s_start i2s_stop i2s_write_bytes i2s_write_expand i2s_zero_dma_buffer RMT APIs rmt_clr_intr_enable_mask rmt_config rmt_driver_install rmt_driver_uninstall rmt_fill_tx_items rmt_get_clk_div rmt_get_mem_block_num rmt_get_mem_pd rmt_get_memory_owner rmt_get_ringbuf_handle rmt_get_rx_idle_thresh rmt_get_status rmt_get_source_clk rmt_get_tx_loop_mode rmt_isr_deregister rmt_isr_register rmt_memory_rw_rst rmt_rx_start rmt_rx_stop rmt_set_clk_div rmt_set_err_intr_en rmt_set_idle_level rmt_set_intr_enable_mask rmt_set_mem_block_num rmt_set_mem_pd rmt_set_memory_owner rmt_set_pin rmt_set_rx_filter rmt_set_rx_idle_thresh rmt_
دانلود کتاب Kolban's Book on ESP32