esphome 2025.8.4__py3-none-any.whl → 2025.9.0b1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. esphome/__main__.py +36 -42
  2. esphome/components/absolute_humidity/absolute_humidity.cpp +3 -5
  3. esphome/components/adc/adc_sensor_esp32.cpp +29 -6
  4. esphome/components/ags10/ags10.cpp +3 -18
  5. esphome/components/ags10/ags10.h +2 -12
  6. esphome/components/aht10/aht10.cpp +3 -3
  7. esphome/components/airthings_ble/__init__.py +2 -2
  8. esphome/components/alarm_control_panel/__init__.py +2 -2
  9. esphome/components/am2315c/am2315c.cpp +1 -17
  10. esphome/components/am2315c/am2315c.h +2 -3
  11. esphome/components/api/__init__.py +2 -2
  12. esphome/components/api/api_connection.cpp +34 -23
  13. esphome/components/api/api_connection.h +20 -39
  14. esphome/components/api/api_frame_helper.cpp +25 -25
  15. esphome/components/api/api_frame_helper.h +3 -3
  16. esphome/components/api/api_frame_helper_noise.cpp +75 -40
  17. esphome/components/api/api_frame_helper_noise.h +3 -7
  18. esphome/components/api/api_frame_helper_plaintext.cpp +17 -4
  19. esphome/components/api/api_frame_helper_plaintext.h +1 -4
  20. esphome/components/api/api_pb2.cpp +20 -2
  21. esphome/components/api/api_pb2.h +146 -141
  22. esphome/components/api/api_pb2_dump.cpp +12 -1
  23. esphome/components/api/proto.cpp +33 -37
  24. esphome/components/async_tcp/__init__.py +2 -2
  25. esphome/components/atm90e26/sensor.py +2 -0
  26. esphome/components/atm90e32/sensor.py +4 -2
  27. esphome/components/audio_adc/__init__.py +2 -2
  28. esphome/components/audio_dac/__init__.py +2 -2
  29. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +1 -1
  30. esphome/components/bedjet/bedjet_hub.cpp +1 -1
  31. esphome/components/binary_sensor/__init__.py +2 -2
  32. esphome/components/binary_sensor/binary_sensor.cpp +13 -0
  33. esphome/components/binary_sensor/binary_sensor.h +4 -7
  34. esphome/components/bl0940/__init__.py +6 -1
  35. esphome/components/bl0940/bl0940.cpp +178 -41
  36. esphome/components/bl0940/bl0940.h +121 -76
  37. esphome/components/bl0940/button/__init__.py +27 -0
  38. esphome/components/bl0940/button/calibration_reset_button.cpp +20 -0
  39. esphome/components/bl0940/button/calibration_reset_button.h +19 -0
  40. esphome/components/bl0940/number/__init__.py +94 -0
  41. esphome/components/bl0940/number/calibration_number.cpp +29 -0
  42. esphome/components/bl0940/number/calibration_number.h +26 -0
  43. esphome/components/bl0940/sensor.py +151 -2
  44. esphome/components/bl0942/bl0942.cpp +1 -1
  45. esphome/components/ble_client/output/__init__.py +4 -4
  46. esphome/components/bluetooth_proxy/__init__.py +1 -1
  47. esphome/components/bluetooth_proxy/bluetooth_connection.h +1 -1
  48. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +15 -7
  49. esphome/components/bluetooth_proxy/bluetooth_proxy.h +3 -2
  50. esphome/components/button/__init__.py +2 -2
  51. esphome/components/button/button.cpp +13 -0
  52. esphome/components/button/button.h +4 -7
  53. esphome/components/camera/buffer.h +18 -0
  54. esphome/components/camera/buffer_impl.cpp +20 -0
  55. esphome/components/camera/buffer_impl.h +26 -0
  56. esphome/components/camera/camera.h +43 -0
  57. esphome/components/camera/encoder.h +69 -0
  58. esphome/components/camera_encoder/__init__.py +62 -0
  59. esphome/components/camera_encoder/encoder_buffer_impl.cpp +23 -0
  60. esphome/components/camera_encoder/encoder_buffer_impl.h +25 -0
  61. esphome/components/camera_encoder/esp32_camera_jpeg_encoder.cpp +82 -0
  62. esphome/components/camera_encoder/esp32_camera_jpeg_encoder.h +39 -0
  63. esphome/components/captive_portal/__init__.py +2 -2
  64. esphome/components/captive_portal/captive_portal.cpp +35 -12
  65. esphome/components/captive_portal/captive_portal.h +3 -3
  66. esphome/components/ccs811/ccs811.cpp +3 -3
  67. esphome/components/climate/__init__.py +2 -2
  68. esphome/components/climate/climate.cpp +1 -1
  69. esphome/components/cover/__init__.py +5 -5
  70. esphome/components/cover/cover.cpp +1 -1
  71. esphome/components/cover/cover.h +2 -2
  72. esphome/components/dallas_temp/dallas_temp.cpp +2 -2
  73. esphome/components/datetime/__init__.py +2 -2
  74. esphome/components/datetime/date_entity.h +2 -2
  75. esphome/components/datetime/datetime_entity.h +2 -2
  76. esphome/components/datetime/time_entity.h +2 -2
  77. esphome/components/debug/debug_esp32.cpp +1 -1
  78. esphome/components/display/__init__.py +4 -4
  79. esphome/components/duty_time/duty_time_sensor.cpp +1 -1
  80. esphome/components/esp32/__init__.py +0 -5
  81. esphome/components/esp32/gpio.cpp +27 -23
  82. esphome/components/esp32/gpio.h +26 -11
  83. esphome/components/esp32/preferences.cpp +8 -4
  84. esphome/components/esp32_ble/__init__.py +7 -2
  85. esphome/components/esp32_ble_client/ble_client_base.cpp +7 -3
  86. esphome/components/esp32_ble_tracker/__init__.py +2 -2
  87. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +9 -44
  88. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +2 -14
  89. esphome/components/esp8266/__init__.py +2 -2
  90. esphome/components/esp8266/core.cpp +2 -2
  91. esphome/components/esp8266/gpio.py +4 -4
  92. esphome/components/esp8266/preferences.cpp +30 -28
  93. esphome/components/esphome/ota/__init__.py +2 -2
  94. esphome/components/esphome/ota/ota_esphome.cpp +21 -19
  95. esphome/components/esphome/ota/ota_esphome.h +6 -5
  96. esphome/components/ethernet/__init__.py +7 -2
  97. esphome/components/ethernet/ethernet_component.cpp +1 -1
  98. esphome/components/event/__init__.py +2 -2
  99. esphome/components/event/event.h +4 -4
  100. esphome/components/fan/__init__.py +2 -2
  101. esphome/components/fan/fan.cpp +2 -1
  102. esphome/components/gdk101/gdk101.cpp +4 -4
  103. esphome/components/globals/__init__.py +2 -2
  104. esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +19 -18
  105. esphome/components/gpio_expander/cached_gpio.h +36 -16
  106. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -5
  107. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  108. esphome/components/haier/haier_base.cpp +1 -1
  109. esphome/components/haier/hon_climate.cpp +1 -1
  110. esphome/components/hlw8012/hlw8012.cpp +5 -5
  111. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +4 -4
  112. esphome/components/host/preferences.h +3 -2
  113. esphome/components/hte501/hte501.cpp +3 -21
  114. esphome/components/hte501/hte501.h +2 -3
  115. esphome/components/http_request/ota/__init__.py +2 -2
  116. esphome/components/i2c/__init__.py +2 -2
  117. esphome/components/i2c/i2c.cpp +13 -9
  118. esphome/components/i2c/i2c_bus.h +36 -6
  119. esphome/components/i2s_audio/__init__.py +8 -2
  120. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  121. esphome/components/i2s_audio/microphone/__init__.py +1 -1
  122. esphome/components/i2s_audio/speaker/__init__.py +1 -1
  123. esphome/components/inkplate/__init__.py +1 -0
  124. esphome/components/inkplate/const.py +105 -0
  125. esphome/components/inkplate/display.py +238 -0
  126. esphome/components/{inkplate6 → inkplate}/inkplate.cpp +156 -74
  127. esphome/components/{inkplate6 → inkplate}/inkplate.h +28 -68
  128. esphome/components/inkplate6/__init__.py +0 -1
  129. esphome/components/inkplate6/display.py +2 -211
  130. esphome/components/integration/integration_sensor.cpp +1 -1
  131. esphome/components/json/__init__.py +2 -2
  132. esphome/components/lc709203f/lc709203f.cpp +4 -17
  133. esphome/components/lc709203f/lc709203f.h +2 -3
  134. esphome/components/ld2420/text_sensor/{text_sensor.cpp → ld2420_text_sensor.cpp} +1 -1
  135. esphome/components/ld2450/ld2450.cpp +1 -1
  136. esphome/components/libretiny/preferences.cpp +13 -5
  137. esphome/components/light/__init__.py +2 -2
  138. esphome/components/light/addressable_light_effect.h +7 -0
  139. esphome/components/light/base_light_effects.h +8 -0
  140. esphome/components/light/light_call.cpp +22 -20
  141. esphome/components/light/light_effect.cpp +36 -0
  142. esphome/components/light/light_effect.h +14 -0
  143. esphome/components/light/light_json_schema.cpp +9 -1
  144. esphome/components/light/light_state.cpp +2 -2
  145. esphome/components/light/light_state.h +38 -0
  146. esphome/components/lock/__init__.py +2 -2
  147. esphome/components/lock/lock.h +2 -2
  148. esphome/components/logger/__init__.py +2 -2
  149. esphome/components/logger/logger.cpp +25 -4
  150. esphome/components/logger/logger.h +1 -1
  151. esphome/components/logger/logger_esp32.cpp +16 -8
  152. esphome/components/logger/logger_esp8266.cpp +11 -3
  153. esphome/components/logger/logger_libretiny.cpp +13 -3
  154. esphome/components/logger/logger_rp2040.cpp +14 -3
  155. esphome/components/logger/logger_zephyr.cpp +15 -4
  156. esphome/components/lvgl/defines.py +1 -0
  157. esphome/components/lvgl/hello_world.py +96 -33
  158. esphome/components/lvgl/number/lvgl_number.h +1 -1
  159. esphome/components/lvgl/select/lvgl_select.h +1 -1
  160. esphome/components/lvgl/widgets/__init__.py +0 -1
  161. esphome/components/lvgl/widgets/spinbox.py +20 -11
  162. esphome/components/m5stack_8angle/binary_sensor/m5stack_8angle_binary_sensor.cpp +1 -1
  163. esphome/components/m5stack_8angle/sensor/m5stack_8angle_sensor.cpp +1 -1
  164. esphome/components/mapping/__init__.py +13 -5
  165. esphome/components/mapping/mapping.h +69 -0
  166. esphome/components/max17043/max17043.cpp +2 -2
  167. esphome/components/mcp23016/__init__.py +1 -0
  168. esphome/components/mcp23016/mcp23016.cpp +20 -5
  169. esphome/components/mcp23016/mcp23016.h +10 -4
  170. esphome/components/mcp23x08_base/mcp23x08_base.cpp +1 -1
  171. esphome/components/mcp23x17_base/mcp23x17_base.cpp +2 -2
  172. esphome/components/mdns/__init__.py +2 -2
  173. esphome/components/mdns/mdns_component.cpp +145 -54
  174. esphome/components/media_player/__init__.py +2 -2
  175. esphome/components/micro_wake_word/__init__.py +2 -2
  176. esphome/components/microphone/__init__.py +2 -2
  177. esphome/components/mipi/__init__.py +77 -33
  178. esphome/components/mipi_rgb/__init__.py +2 -0
  179. esphome/components/mipi_rgb/display.py +321 -0
  180. esphome/components/mipi_rgb/mipi_rgb.cpp +388 -0
  181. esphome/components/mipi_rgb/mipi_rgb.h +127 -0
  182. esphome/components/mipi_rgb/models/guition.py +24 -0
  183. esphome/components/mipi_rgb/models/lilygo.py +228 -0
  184. esphome/components/mipi_rgb/models/rpi.py +9 -0
  185. esphome/components/mipi_rgb/models/st7701s.py +214 -0
  186. esphome/components/mipi_rgb/models/waveshare.py +64 -0
  187. esphome/components/mipi_spi/models/jc.py +229 -0
  188. esphome/components/mlx90614/mlx90614.cpp +1 -16
  189. esphome/components/mlx90614/mlx90614.h +0 -1
  190. esphome/components/mqtt/__init__.py +2 -2
  191. esphome/components/mqtt/mqtt_sensor.cpp +7 -2
  192. esphome/components/ms5611/ms5611.cpp +7 -6
  193. esphome/components/network/__init__.py +2 -2
  194. esphome/components/nextion/nextion_upload.cpp +4 -1
  195. esphome/components/nrf52/__init__.py +49 -6
  196. esphome/components/nrf52/const.py +1 -0
  197. esphome/components/nrf52/dfu.cpp +51 -0
  198. esphome/components/nrf52/dfu.h +24 -0
  199. esphome/components/ntc/ntc.cpp +1 -1
  200. esphome/components/number/__init__.py +2 -2
  201. esphome/components/number/automation.cpp +1 -1
  202. esphome/components/number/number.cpp +21 -0
  203. esphome/components/number/number.h +4 -13
  204. esphome/components/opentherm/hub.h +6 -6
  205. esphome/components/opentherm/number/{number.cpp → opentherm_number.cpp} +2 -2
  206. esphome/components/opentherm/output/{output.cpp → opentherm_output.cpp} +1 -1
  207. esphome/components/opentherm/switch/{switch.cpp → opentherm_switch.cpp} +1 -1
  208. esphome/components/ota/__init__.py +2 -2
  209. esphome/components/pca6416a/__init__.py +1 -0
  210. esphome/components/pca6416a/pca6416a.cpp +20 -5
  211. esphome/components/pca6416a/pca6416a.h +12 -5
  212. esphome/components/pca9554/__init__.py +2 -1
  213. esphome/components/pca9554/pca9554.cpp +12 -18
  214. esphome/components/pca9554/pca9554.h +10 -9
  215. esphome/components/pcf8574/__init__.py +1 -0
  216. esphome/components/pcf8574/pcf8574.cpp +14 -5
  217. esphome/components/pcf8574/pcf8574.h +13 -6
  218. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +7 -7
  219. esphome/components/pipsolar/__init__.py +3 -3
  220. esphome/components/pipsolar/output/__init__.py +4 -4
  221. esphome/components/pulse_width/pulse_width.cpp +2 -2
  222. esphome/components/qmp6988/qmp6988.cpp +81 -126
  223. esphome/components/qmp6988/qmp6988.h +31 -37
  224. esphome/components/radon_eye_ble/__init__.py +2 -2
  225. esphome/components/remote_base/__init__.py +6 -8
  226. esphome/components/rotary_encoder/rotary_encoder.cpp +1 -1
  227. esphome/components/rp2040/__init__.py +2 -2
  228. esphome/components/runtime_stats/runtime_stats.cpp +10 -23
  229. esphome/components/runtime_stats/runtime_stats.h +4 -10
  230. esphome/components/safe_mode/__init__.py +2 -2
  231. esphome/components/safe_mode/safe_mode.cpp +33 -31
  232. esphome/components/script/script.cpp +6 -0
  233. esphome/components/script/script.h +19 -5
  234. esphome/components/sdm_meter/sensor.py +3 -1
  235. esphome/components/select/__init__.py +2 -2
  236. esphome/components/select/select.h +2 -2
  237. esphome/components/sen5x/sen5x.cpp +57 -55
  238. esphome/components/sen5x/sen5x.h +21 -15
  239. esphome/components/sen5x/sensor.py +67 -44
  240. esphome/components/sensirion_common/i2c_sensirion.cpp +18 -47
  241. esphome/components/sensirion_common/i2c_sensirion.h +39 -55
  242. esphome/components/sensor/__init__.py +2 -2
  243. esphome/components/sensor/automation.h +1 -1
  244. esphome/components/sensor/sensor.cpp +34 -6
  245. esphome/components/sensor/sensor.h +4 -21
  246. esphome/components/sgp30/sgp30.cpp +34 -35
  247. esphome/components/sgp30/sgp30.h +11 -10
  248. esphome/components/sgp4x/sgp4x.cpp +2 -2
  249. esphome/components/shelly_dimmer/light.py +7 -7
  250. esphome/components/sht4x/sht4x.cpp +1 -1
  251. esphome/components/sntp/sntp_component.cpp +36 -9
  252. esphome/components/sntp/sntp_component.h +7 -0
  253. esphome/components/sound_level/sound_level.cpp +1 -1
  254. esphome/components/speaker/__init__.py +2 -2
  255. esphome/components/speaker/media_player/__init__.py +2 -2
  256. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -1
  257. esphome/components/spi/__init__.py +2 -2
  258. esphome/components/sprinkler/sprinkler.cpp +1 -1
  259. esphome/components/sps30/sps30.cpp +18 -23
  260. esphome/components/sps30/sps30.h +3 -3
  261. esphome/components/status_led/__init__.py +2 -2
  262. esphome/components/stepper/__init__.py +2 -2
  263. esphome/components/switch/__init__.py +2 -2
  264. esphome/components/switch/switch.cpp +5 -5
  265. esphome/components/sx1509/__init__.py +1 -1
  266. esphome/components/sx1509/sx1509.cpp +12 -7
  267. esphome/components/sx1509/sx1509.h +11 -4
  268. esphome/components/tca9555/tca9555.cpp +5 -5
  269. esphome/components/tee501/tee501.cpp +2 -21
  270. esphome/components/tee501/tee501.h +2 -4
  271. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +1 -1
  272. esphome/components/template/datetime/template_date.cpp +1 -1
  273. esphome/components/template/datetime/template_datetime.cpp +2 -2
  274. esphome/components/template/datetime/template_time.cpp +1 -1
  275. esphome/components/template/number/template_number.cpp +1 -1
  276. esphome/components/template/select/template_select.cpp +1 -1
  277. esphome/components/template/text/template_text.cpp +1 -1
  278. esphome/components/text/__init__.py +2 -2
  279. esphome/components/text/text.h +2 -2
  280. esphome/components/text_sensor/__init__.py +2 -2
  281. esphome/components/text_sensor/text_sensor.h +4 -4
  282. esphome/components/thermostat/climate.py +11 -7
  283. esphome/components/thermostat/thermostat_climate.cpp +237 -206
  284. esphome/components/thermostat/thermostat_climate.h +52 -41
  285. esphome/components/time/__init__.py +2 -2
  286. esphome/components/tmp1075/tmp1075.cpp +1 -1
  287. esphome/components/total_daily_energy/total_daily_energy.cpp +1 -1
  288. esphome/components/touchscreen/__init__.py +2 -2
  289. esphome/components/tuya/number/tuya_number.cpp +1 -1
  290. esphome/components/udp/udp_component.cpp +3 -3
  291. esphome/components/ufire_ec/ufire_ec.cpp +4 -4
  292. esphome/components/ufire_ise/ufire_ise.cpp +4 -4
  293. esphome/components/update/__init__.py +2 -2
  294. esphome/components/usb_uart/usb_uart.cpp +1 -1
  295. esphome/components/valve/__init__.py +5 -5
  296. esphome/components/valve/valve.cpp +1 -1
  297. esphome/components/valve/valve.h +2 -2
  298. esphome/components/wake_on_lan/wake_on_lan.cpp +2 -2
  299. esphome/components/waveshare_epaper/waveshare_213v3.cpp +1 -1
  300. esphome/components/web_server/__init__.py +2 -2
  301. esphome/components/web_server/ota/__init__.py +2 -2
  302. esphome/components/web_server/ota/ota_web_server.cpp +11 -0
  303. esphome/components/web_server/web_server.cpp +58 -12
  304. esphome/components/web_server_base/__init__.py +2 -2
  305. esphome/components/wifi/__init__.py +5 -5
  306. esphome/components/wifi/wifi_component.cpp +3 -3
  307. esphome/components/wifi/wifi_component_esp_idf.cpp +2 -0
  308. esphome/config_validation.py +2 -2
  309. esphome/const.py +2 -1
  310. esphome/core/__init__.py +1 -0
  311. esphome/core/application.cpp +89 -51
  312. esphome/core/application.h +1 -0
  313. esphome/core/component.cpp +41 -19
  314. esphome/core/component.h +17 -13
  315. esphome/core/config.py +7 -7
  316. esphome/core/defines.h +4 -0
  317. esphome/core/entity_base.cpp +22 -8
  318. esphome/core/entity_base.h +43 -0
  319. esphome/core/helpers.cpp +26 -13
  320. esphome/core/helpers.h +4 -3
  321. esphome/core/ring_buffer.cpp +6 -2
  322. esphome/core/ring_buffer.h +2 -1
  323. esphome/core/scheduler.cpp +175 -94
  324. esphome/core/scheduler.h +66 -35
  325. esphome/core/time.cpp +6 -20
  326. esphome/coroutine.py +80 -3
  327. esphome/cpp_generator.py +13 -0
  328. esphome/cpp_helpers.py +2 -2
  329. esphome/dashboard/web_server.py +67 -10
  330. esphome/espota2.py +13 -6
  331. esphome/helpers.py +68 -83
  332. esphome/resolver.py +67 -0
  333. esphome/util.py +9 -6
  334. esphome/wizard.py +39 -26
  335. {esphome-2025.8.4.dist-info → esphome-2025.9.0b1.dist-info}/METADATA +9 -9
  336. {esphome-2025.8.4.dist-info → esphome-2025.9.0b1.dist-info}/RECORD +344 -313
  337. /esphome/components/ld2420/text_sensor/{text_sensor.h → ld2420_text_sensor.h} +0 -0
  338. /esphome/components/opentherm/number/{number.h → opentherm_number.h} +0 -0
  339. /esphome/components/opentherm/output/{output.h → opentherm_output.h} +0 -0
  340. /esphome/components/opentherm/switch/{switch.h → opentherm_switch.h} +0 -0
  341. {esphome-2025.8.4.dist-info → esphome-2025.9.0b1.dist-info}/WHEEL +0 -0
  342. {esphome-2025.8.4.dist-info → esphome-2025.9.0b1.dist-info}/entry_points.txt +0 -0
  343. {esphome-2025.8.4.dist-info → esphome-2025.9.0b1.dist-info}/licenses/LICENSE +0 -0
  344. {esphome-2025.8.4.dist-info → esphome-2025.9.0b1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,127 @@
1
+ #pragma once
2
+
3
+ #ifdef USE_ESP32_VARIANT_ESP32S3
4
+ #include "esphome/core/gpio.h"
5
+ #include "esphome/components/display/display.h"
6
+ #include "esp_lcd_panel_ops.h"
7
+ #ifdef USE_SPI
8
+ #include "esphome/components/spi/spi.h"
9
+ #endif
10
+
11
+ namespace esphome {
12
+ namespace mipi_rgb {
13
+
14
+ constexpr static const char *const TAG = "display.mipi_rgb";
15
+ const uint8_t SW_RESET_CMD = 0x01;
16
+ const uint8_t SLEEP_OUT = 0x11;
17
+ const uint8_t SDIR_CMD = 0xC7;
18
+ const uint8_t MADCTL_CMD = 0x36;
19
+ const uint8_t INVERT_OFF = 0x20;
20
+ const uint8_t INVERT_ON = 0x21;
21
+ const uint8_t DISPLAY_ON = 0x29;
22
+ const uint8_t CMD2_BKSEL = 0xFF;
23
+ const uint8_t CMD2_BK0[5] = {0x77, 0x01, 0x00, 0x00, 0x10};
24
+
25
+ class MipiRgb : public display::Display {
26
+ public:
27
+ MipiRgb(int width, int height) : width_(width), height_(height) {}
28
+ void setup() override;
29
+ void loop() override;
30
+ void update() override;
31
+ void fill(Color color);
32
+ void draw_pixels_at(int x_start, int y_start, int w, int h, const uint8_t *ptr, display::ColorOrder order,
33
+ display::ColorBitness bitness, bool big_endian, int x_offset, int y_offset, int x_pad) override;
34
+ void write_to_display_(int x_start, int y_start, int w, int h, const uint8_t *ptr, int x_offset, int y_offset,
35
+ int x_pad);
36
+ bool check_buffer_();
37
+
38
+ display::ColorOrder get_color_mode() { return this->color_mode_; }
39
+ void set_color_mode(display::ColorOrder color_mode) { this->color_mode_ = color_mode; }
40
+ void set_invert_colors(bool invert_colors) { this->invert_colors_ = invert_colors; }
41
+ void set_madctl(uint8_t madctl) { this->madctl_ = madctl; }
42
+
43
+ void add_data_pin(InternalGPIOPin *data_pin, size_t index) { this->data_pins_[index] = data_pin; };
44
+ void set_de_pin(InternalGPIOPin *de_pin) { this->de_pin_ = de_pin; }
45
+ void set_pclk_pin(InternalGPIOPin *pclk_pin) { this->pclk_pin_ = pclk_pin; }
46
+ void set_vsync_pin(InternalGPIOPin *vsync_pin) { this->vsync_pin_ = vsync_pin; }
47
+ void set_hsync_pin(InternalGPIOPin *hsync_pin) { this->hsync_pin_ = hsync_pin; }
48
+ void set_reset_pin(GPIOPin *reset_pin) { this->reset_pin_ = reset_pin; }
49
+ void set_width(uint16_t width) { this->width_ = width; }
50
+ void set_pclk_frequency(uint32_t pclk_frequency) { this->pclk_frequency_ = pclk_frequency; }
51
+ void set_pclk_inverted(bool inverted) { this->pclk_inverted_ = inverted; }
52
+ void set_model(const char *model) { this->model_ = model; }
53
+ int get_width() override;
54
+ int get_height() override;
55
+ void set_hsync_back_porch(uint16_t hsync_back_porch) { this->hsync_back_porch_ = hsync_back_porch; }
56
+ void set_hsync_front_porch(uint16_t hsync_front_porch) { this->hsync_front_porch_ = hsync_front_porch; }
57
+ void set_hsync_pulse_width(uint16_t hsync_pulse_width) { this->hsync_pulse_width_ = hsync_pulse_width; }
58
+ void set_vsync_pulse_width(uint16_t vsync_pulse_width) { this->vsync_pulse_width_ = vsync_pulse_width; }
59
+ void set_vsync_back_porch(uint16_t vsync_back_porch) { this->vsync_back_porch_ = vsync_back_porch; }
60
+ void set_vsync_front_porch(uint16_t vsync_front_porch) { this->vsync_front_porch_ = vsync_front_porch; }
61
+ void set_enable_pins(std::vector<GPIOPin *> enable_pins) { this->enable_pins_ = std::move(enable_pins); }
62
+ display::DisplayType get_display_type() override { return display::DisplayType::DISPLAY_TYPE_COLOR; }
63
+ int get_width_internal() override { return this->width_; }
64
+ int get_height_internal() override { return this->height_; }
65
+ void dump_pins_(uint8_t start, uint8_t end, const char *name, uint8_t offset);
66
+ void dump_config() override;
67
+ void draw_pixel_at(int x, int y, Color color) override;
68
+
69
+ // this will be horribly slow.
70
+ protected:
71
+ void setup_enables_();
72
+ void common_setup_();
73
+ InternalGPIOPin *de_pin_{nullptr};
74
+ InternalGPIOPin *pclk_pin_{nullptr};
75
+ InternalGPIOPin *hsync_pin_{nullptr};
76
+ InternalGPIOPin *vsync_pin_{nullptr};
77
+ GPIOPin *reset_pin_{nullptr};
78
+ InternalGPIOPin *data_pins_[16] = {};
79
+ uint16_t hsync_pulse_width_ = 10;
80
+ uint16_t hsync_back_porch_ = 10;
81
+ uint16_t hsync_front_porch_ = 20;
82
+ uint16_t vsync_pulse_width_ = 10;
83
+ uint16_t vsync_back_porch_ = 10;
84
+ uint16_t vsync_front_porch_ = 10;
85
+ uint32_t pclk_frequency_ = 16 * 1000 * 1000;
86
+ bool pclk_inverted_{true};
87
+ uint8_t madctl_{};
88
+ const char *model_{"Unknown"};
89
+ bool invert_colors_{};
90
+ display::ColorOrder color_mode_{display::COLOR_ORDER_BGR};
91
+ size_t width_;
92
+ size_t height_;
93
+ uint16_t *buffer_{nullptr};
94
+ std::vector<GPIOPin *> enable_pins_{};
95
+ uint16_t x_low_{1};
96
+ uint16_t y_low_{1};
97
+ uint16_t x_high_{0};
98
+ uint16_t y_high_{0};
99
+
100
+ esp_lcd_panel_handle_t handle_{};
101
+ };
102
+
103
+ #ifdef USE_SPI
104
+ class MipiRgbSpi : public MipiRgb,
105
+ public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING,
106
+ spi::DATA_RATE_1MHZ> {
107
+ public:
108
+ MipiRgbSpi(int width, int height) : MipiRgb(width, height) {}
109
+
110
+ void set_init_sequence(const std::vector<uint8_t> &init_sequence) { this->init_sequence_ = init_sequence; }
111
+ void set_dc_pin(GPIOPin *dc_pin) { this->dc_pin_ = dc_pin; }
112
+ void setup() override;
113
+
114
+ protected:
115
+ void write_command_(uint8_t value);
116
+ void write_data_(uint8_t value);
117
+ void write_init_sequence_();
118
+ void dump_config();
119
+
120
+ GPIOPin *dc_pin_{nullptr};
121
+ std::vector<uint8_t> init_sequence_;
122
+ };
123
+ #endif
124
+
125
+ } // namespace mipi_rgb
126
+ } // namespace esphome
127
+ #endif
@@ -0,0 +1,24 @@
1
+ from .st7701s import st7701s
2
+
3
+ st7701s.extend(
4
+ "GUITION-4848S040",
5
+ width=480,
6
+ height=480,
7
+ data_rate="2MHz",
8
+ cs_pin=39,
9
+ de_pin=18,
10
+ hsync_pin=16,
11
+ vsync_pin=17,
12
+ pclk_pin=21,
13
+ pclk_frequency="12MHz",
14
+ pixel_mode="18bit",
15
+ mirror_x=True,
16
+ mirror_y=True,
17
+ data_pins={
18
+ "red": [11, 12, 13, 14, 0],
19
+ "green": [8, 20, 3, 46, 9, 10],
20
+ "blue": [4, 5, 6, 7, 15],
21
+ },
22
+ # Additional configuration for Guition 4848S040, 16 bit bus config
23
+ add_init_sequence=((0xCD, 0x00),),
24
+ )
@@ -0,0 +1,228 @@
1
+ from esphome.config_validation import UNDEFINED
2
+
3
+ from .st7701s import ST7701S
4
+
5
+ # fmt: off
6
+ ST7701S(
7
+ "T-PANEL-S3",
8
+ width=480,
9
+ height=480,
10
+ color_order="BGR",
11
+ invert_colors=False,
12
+ swap_xy=UNDEFINED,
13
+ spi_mode="MODE3",
14
+ cs_pin={"xl9535": None, "number": 17},
15
+ reset_pin={"xl9535": None, "number": 5},
16
+ hsync_pin=39,
17
+ vsync_pin=40,
18
+ pclk_pin=41,
19
+ data_pins={
20
+ "red": [12, 13, 42, 46, 45],
21
+ "green": [6, 7, 8, 9, 10, 11],
22
+ "blue": [1, 2, 3, 4, 5],
23
+ },
24
+ hsync_front_porch=20,
25
+ hsync_back_porch=0,
26
+ hsync_pulse_width=2,
27
+ vsync_front_porch=30,
28
+ vsync_back_porch=1,
29
+ vsync_pulse_width=8,
30
+ pclk_frequency="6MHz",
31
+ pclk_inverted=False,
32
+ initsequence=(
33
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x13), (0xEF, 0x08), (0xFF, 0x77, 0x01, 0x00, 0x00, 0x10),
34
+ (0xC0, 0x3B, 0x00), (0xC1, 0x0B, 0x02), (0xC2, 0x30, 0x02, 0x37), (0xCC, 0x10),
35
+ (0xB0, 0x00, 0x0F, 0x16, 0x0E, 0x11, 0x07, 0x09, 0x09, 0x08, 0x23, 0x05, 0x11, 0x0F, 0x28, 0x2D, 0x18),
36
+ (0xB1, 0x00, 0x0F, 0x16, 0x0E, 0x11, 0x07, 0x09, 0x08, 0x09, 0x23, 0x05, 0x11, 0x0F, 0x28, 0x2D, 0x18),
37
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x11),
38
+ (0xB0, 0x4D), (0xB1, 0x33), (0xB2, 0x87), (0xB5, 0x4B), (0xB7, 0x8C), (0xB8, 0x20), (0xC1, 0x78),
39
+ (0xC2, 0x78), (0xD0, 0x88), (0xE0, 0x00, 0x00, 0x02),
40
+ (0xE1, 0x02, 0xF0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x44, 0x44),
41
+ (0xE2, 0x10, 0x10, 0x40, 0x40, 0xF2, 0xF0, 0x00, 0x00, 0xF2, 0xF0, 0x00, 0x00),
42
+ (0xE3, 0x00, 0x00, 0x11, 0x11), (0xE4, 0x44, 0x44),
43
+ (0xE5, 0x07, 0xEF, 0xF0, 0xF0, 0x09, 0xF1, 0xF0, 0xF0, 0x03, 0xF3, 0xF0, 0xF0, 0x05, 0xED, 0xF0, 0xF0),
44
+ (0xE6, 0x00, 0x00, 0x11, 0x11), (0xE7, 0x44, 0x44),
45
+ (0xE8, 0x08, 0xF0, 0xF0, 0xF0, 0x0A, 0xF2, 0xF0, 0xF0, 0x04, 0xF4, 0xF0, 0xF0, 0x06, 0xEE, 0xF0, 0xF0),
46
+ (0xEB, 0x00, 0x00, 0xE4, 0xE4, 0x44, 0x88, 0x40),
47
+ (0xEC, 0x78, 0x00),
48
+ (0xED, 0x20, 0xF9, 0x87, 0x76, 0x65, 0x54, 0x4F, 0xFF, 0xFF, 0xF4, 0x45, 0x56, 0x67, 0x78, 0x9F, 0x02),
49
+ (0xEF, 0x10, 0x0D, 0x04, 0x08, 0x3F, 0x1F),
50
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x10),
51
+ ),
52
+ )
53
+
54
+
55
+ t_rgb = ST7701S(
56
+ "T-RGB-2.1",
57
+ width=480,
58
+ height=480,
59
+ color_order="BGR",
60
+ pixel_mode="18bit",
61
+ invert_colors=False,
62
+ swap_xy=UNDEFINED,
63
+ spi_mode="MODE3",
64
+ cs_pin={"xl9535": None, "number": 3},
65
+ de_pin=45,
66
+ hsync_pin=47,
67
+ vsync_pin=41,
68
+ pclk_pin=42,
69
+ data_pins={
70
+ "red": [7, 6, 5, 3, 2],
71
+ "green": [14, 13, 12, 11, 10, 9],
72
+ "blue": [21, 18, 17, 16, 15],
73
+ },
74
+ hsync_front_porch=50,
75
+ hsync_pulse_width=1,
76
+ hsync_back_porch=30,
77
+ vsync_front_porch=20,
78
+ vsync_pulse_width=1,
79
+ vsync_back_porch=30,
80
+ pclk_frequency="12MHz",
81
+ pclk_inverted=False,
82
+ initsequence=(
83
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x10),
84
+
85
+ (0xC0, 0x3B, 0x00),
86
+ (0xC1, 0x0B, 0x02),
87
+ (0xC2, 0x07, 0x02),
88
+ (0xCC, 0x10),
89
+ (0xCD, 0x08),
90
+
91
+ (0xB0,
92
+ 0x00, 0x11, 0x16, 0x0e,
93
+ 0x11, 0x06, 0x05, 0x09,
94
+ 0x08, 0x21, 0x06, 0x13,
95
+ 0x10, 0x29, 0x31, 0x18),
96
+
97
+ (0xB1,
98
+ 0x00, 0x11, 0x16, 0x0e,
99
+ 0x11, 0x07, 0x05, 0x09,
100
+ 0x09, 0x21, 0x05, 0x13,
101
+ 0x11, 0x2a, 0x31, 0x18),
102
+
103
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x11),
104
+
105
+ (0xB0, 0x6D),
106
+ (0xB1, 0x37),
107
+ (0xB2, 0x81),
108
+ (0xB3, 0x80),
109
+ (0xB5, 0x43),
110
+ (0xB7, 0x85),
111
+ (0xB8, 0x20),
112
+
113
+ (0xC1, 0x78),
114
+ (0xC2, 0x78),
115
+ (0xC3, 0x8C),
116
+
117
+ (0xD0, 0x88),
118
+
119
+ (0xE0, 0x00, 0x00, 0x02),
120
+ (0xE1,
121
+ 0x03, 0xA0, 0x00, 0x00,
122
+ 0x04, 0xA0, 0x00, 0x00,
123
+ 0x00, 0x20, 0x20),
124
+
125
+ (0xE2,
126
+ 0x00, 0x00, 0x00, 0x00,
127
+ 0x00, 0x00, 0x00, 0x00,
128
+ 0x00, 0x00, 0x00, 0x00,
129
+ 0x00),
130
+
131
+ (0xE3, 0x00, 0x00, 0x11, 0x00),
132
+ (0xE4, 0x22, 0x00),
133
+
134
+ (0xE5,
135
+ 0x05, 0xEC, 0xA0, 0xA0,
136
+ 0x07, 0xEE, 0xA0, 0xA0,
137
+ 0x00, 0x00, 0x00, 0x00,
138
+ 0x00, 0x00, 0x00, 0x00),
139
+
140
+ (0xE6, 0x00, 0x00, 0x11, 0x00),
141
+ (0xE7, 0x22, 0x00),
142
+
143
+ (0xE8,
144
+ 0x06, 0xED, 0xA0, 0xA0,
145
+ 0x08, 0xEF, 0xA0, 0xA0,
146
+ 0x00, 0x00, 0x00, 0x00,
147
+ 0x00, 0x00, 0x00, 0x00),
148
+
149
+ (0xEB, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x10),
150
+
151
+ (0xED,
152
+ 0xFF, 0xFF, 0xFF, 0xBA,
153
+ 0x0A, 0xBF, 0x45, 0xFF,
154
+ 0xFF, 0x54, 0xFB, 0xA0,
155
+ 0xAB, 0xFF, 0xFF, 0xFF),
156
+
157
+ (0xEF, 0x10, 0x0D, 0x04, 0x08, 0x3F, 0x1F),
158
+
159
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x13),
160
+ (0xEF, 0x08),
161
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x10)
162
+ )
163
+
164
+ )
165
+ t_rgb.extend(
166
+ "T-RGB-2.8",
167
+ initsequence=(
168
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x13),
169
+ (0xEF, 0x08),
170
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x10),
171
+ (0xC0, 0x3B, 0x00),
172
+ (0xC1, 0x10, 0x0C),
173
+ (0xC2, 0x07, 0x0A),
174
+ (0xC7, 0x00),
175
+ (0xC7, 0x10),
176
+ (0xCD, 0x08),
177
+ (0xB0,
178
+ 0x05, 0x12, 0x98, 0x0e, 0x0F,
179
+ 0x07, 0x07, 0x09, 0x09, 0x23,
180
+ 0x05, 0x52, 0x0F, 0x67, 0x2C, 0x11),
181
+ (0xB1,
182
+ 0x0B, 0x11, 0x97, 0x0C, 0x12,
183
+ 0x06, 0x06, 0x08, 0x08, 0x22,
184
+ 0x03, 0x51, 0x11, 0x66, 0x2B, 0x0F),
185
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x11),
186
+ (0xB0, 0x5D),
187
+ (0xB1, 0x2D),
188
+ (0xB2, 0x81),
189
+ (0xB3, 0x80),
190
+ (0xB5, 0x4E),
191
+ (0xB7, 0x85),
192
+ (0xB8, 0x20),
193
+ (0xC1, 0x78),
194
+ (0xC2, 0x78),
195
+ (0xD0, 0x88),
196
+ (0xE0, 0x00, 0x00, 0x02),
197
+ (0xE1,
198
+ 0x06, 0x30, 0x08, 0x30, 0x05,
199
+ 0x30, 0x07, 0x30, 0x00, 0x33,
200
+ 0x33),
201
+ (0xE2,
202
+ 0x11, 0x11, 0x33, 0x33, 0xf4,
203
+ 0x00, 0x00, 0x00, 0xf4, 0x00,
204
+ 0x00, 0x00),
205
+ (0xE3, 0x00, 0x00, 0x11, 0x11),
206
+ (0xE4, 0x44, 0x44),
207
+ (0xE5,
208
+ 0x0d, 0xf5, 0x30, 0xf0, 0x0f,
209
+ 0xf7, 0x30, 0xf0, 0x09, 0xf1,
210
+ 0x30, 0xf0, 0x0b, 0xf3, 0x30, 0xf0),
211
+ (0xE6, 0x00, 0x00, 0x11, 0x11),
212
+ (0xE7, 0x44, 0x44),
213
+ (0xE8,
214
+ 0x0c, 0xf4, 0x30, 0xf0,
215
+ 0x0e, 0xf6, 0x30, 0xf0,
216
+ 0x08, 0xf0, 0x30, 0xf0,
217
+ 0x0a, 0xf2, 0x30, 0xf0),
218
+ (0xe9, 0x36),
219
+ (0xEB, 0x00, 0x01, 0xe4, 0xe4, 0x44, 0x88, 0x40),
220
+ (0xED,
221
+ 0xff, 0x10, 0xaf, 0x76,
222
+ 0x54, 0x2b, 0xcf, 0xff,
223
+ 0xff, 0xfc, 0xb2, 0x45,
224
+ 0x67, 0xfa, 0x01, 0xff),
225
+ (0xEF, 0x08, 0x08, 0x08, 0x45, 0x3f, 0x54),
226
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x10),
227
+ )
228
+ )
@@ -0,0 +1,9 @@
1
+ from esphome.components.mipi import DriverChip
2
+ from esphome.config_validation import UNDEFINED
3
+
4
+ # A driver chip for Raspberry Pi MIPI RGB displays. These require no init sequence
5
+ DriverChip(
6
+ "RPI",
7
+ swap_xy=UNDEFINED,
8
+ initsequence=(),
9
+ )
@@ -0,0 +1,214 @@
1
+ from esphome.components.mipi import (
2
+ MADCTL,
3
+ MADCTL_ML,
4
+ MADCTL_XFLIP,
5
+ MODE_BGR,
6
+ DriverChip,
7
+ )
8
+ from esphome.config_validation import UNDEFINED
9
+ from esphome.const import CONF_COLOR_ORDER, CONF_HEIGHT, CONF_MIRROR_X, CONF_MIRROR_Y
10
+
11
+ SDIR_CMD = 0xC7
12
+
13
+
14
+ class ST7701S(DriverChip):
15
+ # The ST7701s does not use the standard MADCTL bits for x/y mirroring
16
+ def add_madctl(self, sequence: list, config: dict):
17
+ transform = self.get_transform(config)
18
+ madctl = 0x00
19
+ if config[CONF_COLOR_ORDER] == MODE_BGR:
20
+ madctl |= 0x08
21
+ if transform.get(CONF_MIRROR_Y):
22
+ madctl |= MADCTL_ML
23
+ sequence.append((MADCTL, madctl))
24
+ sdir = 0
25
+ if transform.get(CONF_MIRROR_X):
26
+ sdir |= 0x04
27
+ madctl |= MADCTL_XFLIP
28
+ sequence.append((SDIR_CMD, sdir))
29
+ return madctl
30
+
31
+ @property
32
+ def transforms(self) -> set[str]:
33
+ """
34
+ The ST7701 never supports axis swapping, and mirroring the y-axis only works for full height.
35
+ """
36
+ if self.get_default(CONF_HEIGHT) != 864:
37
+ return {CONF_MIRROR_X}
38
+ return {CONF_MIRROR_X, CONF_MIRROR_Y}
39
+
40
+
41
+ # fmt: off
42
+ st7701s = ST7701S(
43
+ "ST7701S",
44
+ width=480,
45
+ height=864,
46
+ swap_xy=UNDEFINED,
47
+ hsync_front_porch=20,
48
+ hsync_back_porch=10,
49
+ hsync_pulse_width=10,
50
+ vsync_front_porch=10,
51
+ vsync_back_porch=10,
52
+ vsync_pulse_width=10,
53
+ pclk_frequency="16MHz",
54
+ pclk_inverted=True,
55
+ initsequence=(
56
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x10), # Page 0
57
+ (0xC0, 0x3B, 0x00), (0xC1, 0x0D, 0x02), (0xC2, 0x31, 0x05),
58
+ (0xB0, 0x00, 0x11, 0x18, 0x0E, 0x11, 0x06, 0x07, 0x08, 0x07, 0x22, 0x04, 0x12, 0x0F, 0xAA, 0x31, 0x18,),
59
+ (0xB1, 0x00, 0x11, 0x19, 0x0E, 0x12, 0x07, 0x08, 0x08, 0x08, 0x22, 0x04, 0x11, 0x11, 0xA9, 0x32, 0x18,),
60
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x11), # page 1
61
+ (0xB0, 0x60), (0xB1, 0x32), (0xB2, 0x07), (0xB3, 0x80), (0xB5, 0x49), (0xB7, 0x85), (0xB8, 0x21), (0xC1, 0x78),
62
+ (0xC2, 0x78), (0xE0, 0x00, 0x1B, 0x02),
63
+ (0xE1, 0x08, 0xA0, 0x00, 0x00, 0x07, 0xA0, 0x00, 0x00, 0x00, 0x44, 0x44),
64
+ (0xE2, 0x11, 0x11, 0x44, 0x44, 0xED, 0xA0, 0x00, 0x00, 0xEC, 0xA0, 0x00, 0x00),
65
+ (0xE3, 0x00, 0x00, 0x11, 0x11),
66
+ (0xE4, 0x44, 0x44),
67
+ (0xE5, 0x0A, 0xE9, 0xD8, 0xA0, 0x0C, 0xEB, 0xD8, 0xA0, 0x0E, 0xED, 0xD8, 0xA0, 0x10, 0xEF, 0xD8, 0xA0,),
68
+ (0xE6, 0x00, 0x00, 0x11, 0x11), (0xE7, 0x44, 0x44),
69
+ (0xE8, 0x09, 0xE8, 0xD8, 0xA0, 0x0B, 0xEA, 0xD8, 0xA0, 0x0D, 0xEC, 0xD8, 0xA0, 0x0F, 0xEE, 0xD8, 0xA0,),
70
+ (0xEB, 0x02, 0x00, 0xE4, 0xE4, 0x88, 0x00, 0x40), (0xEC, 0x3C, 0x00),
71
+ (0xED, 0xAB, 0x89, 0x76, 0x54, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x20, 0x45, 0x67, 0x98, 0xBA,),
72
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x13), # Page 3
73
+ (0xE5, 0xE4),
74
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x10), # Page 0
75
+ (0xCD, 0x08),
76
+ )
77
+ )
78
+
79
+ st7701s.extend(
80
+ "MAKERFABS-4",
81
+ width=480,
82
+ height=480,
83
+ color_order="RGB",
84
+ invert_colors=True,
85
+ pixel_mode="18bit",
86
+ cs_pin=1,
87
+ de_pin={
88
+ "number": 45,
89
+ "ignore_strapping_warning": True
90
+ },
91
+ hsync_pin=5,
92
+ vsync_pin=4,
93
+ pclk_pin=21,
94
+ data_pins={
95
+ "red": [39, 40, 41, 42, 2],
96
+ "green": [0, 9, 14, 47, 48, 3],
97
+ "blue": [6, 7, 15, 16, 8]
98
+ }
99
+ )
100
+
101
+ st7701s.extend(
102
+ "SEEED-INDICATOR-D1",
103
+ width=480,
104
+ height=480,
105
+ mirror_x=True,
106
+ mirror_y=True,
107
+ invert_colors=True,
108
+ pixel_mode="18bit",
109
+ spi_mode="MODE3",
110
+ data_rate="2MHz",
111
+ hsync_front_porch=10,
112
+ hsync_pulse_width=8,
113
+ hsync_back_porch=50,
114
+ vsync_front_porch=10,
115
+ vsync_pulse_width=8,
116
+ vsync_back_porch=20,
117
+ cs_pin={"pca9554": None, "number": 4},
118
+ de_pin=18,
119
+ hsync_pin=16,
120
+ vsync_pin=17,
121
+ pclk_pin=21,
122
+ pclk_inverted=False,
123
+ data_pins={
124
+ "red": [4, 3, 2, 1, 0],
125
+ "green": [10, 9, 8, 7, 6, 5],
126
+ "blue": [15, 14, 13, 12, 11]
127
+ },
128
+ )
129
+
130
+ st7701s.extend(
131
+ "UEDX48480021-MD80ET",
132
+ width=480,
133
+ height=480,
134
+ pixel_mode="18bit",
135
+ cs_pin=18,
136
+ reset_pin=8,
137
+ de_pin=17,
138
+ vsync_pin={"number": 3, "ignore_strapping_warning": True},
139
+ hsync_pin={"number": 46, "ignore_strapping_warning": True},
140
+ pclk_pin=9,
141
+ data_pins={
142
+ "red": [40, 41, 42, 2, 1],
143
+ "green": [21, 47, 48, 45, 38, 39],
144
+ "blue": [10, 11, {"number": 12, "allow_other_uses": True}, {"number": 13, "allow_other_uses": True}, 14]
145
+ },
146
+ initsequence=(
147
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x13), (0xEF, 0x08), (0xFF, 0x77, 0x01, 0x00, 0x00, 0x10),
148
+ (0xC0, 0x3B, 0x00), (0xC1, 0x0B, 0x02), (0xC2, 0x07, 0x02), (0xC7, 0x00), (0xCC, 0x10), (0xCD, 0x08),
149
+ (0xB0, 0x00, 0x11, 0x16, 0x0E, 0x11, 0x06, 0x05, 0x09, 0x08, 0x21, 0x06, 0x13, 0x10, 0x29, 0x31, 0x18),
150
+ (0xB1, 0x00, 0x11, 0x16, 0x0E, 0x11, 0x07, 0x05, 0x09, 0x09, 0x21, 0x05, 0x13, 0x11, 0x2A, 0x31, 0x18),
151
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x11),
152
+ (0xB0, 0x6D), (0xB1, 0x37), (0xB2, 0x8B), (0xB3, 0x80), (0xB5, 0x43), (0xB7, 0x85),
153
+ (0xB8, 0x20), (0xC0, 0x09), (0xC1, 0x78), (0xC2, 0x78), (0xD0, 0x88),
154
+ (0xE0, 0x00, 0x00, 0x02),
155
+ (0xE1, 0x03, 0xA0, 0x00, 0x00, 0x04, 0xA0, 0x00, 0x00, 0x00, 0x20, 0x20),
156
+ (0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00),
157
+ (0xE3, 0x00, 0x00, 0x11, 0x00),
158
+ (0xE4, 0x22, 0x00),
159
+ (0xE5, 0x05, 0xEC, 0xF6, 0xCA, 0x07, 0xEE, 0xF6, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00),
160
+ (0xE6, 0x00, 0x00, 0x11, 0x00),
161
+ (0xE7, 0x22, 0x00),
162
+ (0xE8, 0x06, 0xED, 0xF6, 0xCA, 0x08, 0xEF, 0xF6, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00),
163
+ (0xE9, 0x36, 0x00),
164
+ (0xEB, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00),
165
+ (0xED, 0xFF, 0xFF, 0xFF, 0xBA, 0x0A, 0xFF, 0x45, 0xFF, 0xFF, 0x54, 0xFF, 0xA0, 0xAB, 0xFF, 0xFF, 0xFF),
166
+ (0xEF, 0x08, 0x08, 0x08, 0x45, 0x3F, 0x54),
167
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x13), (0xE8, 0x00, 0x0E), (0xFF, 0x77, 0x01, 0x00, 0x00, 0x00),
168
+ (0x11, 0x00), (0xFF, 0x77, 0x01, 0x00, 0x00, 0x13), (0xE8, 0x00, 0x0C),
169
+ (0xE8, 0x00, 0x00), (0xFF, 0x77, 0x01, 0x00, 0x00, 0x00)
170
+ )
171
+ )
172
+
173
+ st7701s.extend(
174
+ "ZX2D10GE01R-V4848",
175
+ width=480,
176
+ height=480,
177
+ pixel_mode="18bit",
178
+ cs_pin=21,
179
+ de_pin=39,
180
+ vsync_pin=48,
181
+ hsync_pin=40,
182
+ pclk_pin={"number": 45, "ignore_strapping_warning": True},
183
+ pclk_frequency="15MHz",
184
+ pclk_inverted=True,
185
+ hsync_pulse_width=10,
186
+ hsync_back_porch=10,
187
+ hsync_front_porch=10,
188
+ vsync_pulse_width=2,
189
+ vsync_back_porch=12,
190
+ vsync_front_porch=14,
191
+ data_pins={
192
+ "red": [10, 16, 9, 15, 46],
193
+ "green": [8, 13, 18, 12, 11, 17],
194
+ "blue": [{"number": 47, "allow_other_uses": True}, {"number": 41, "allow_other_uses": True}, 0, 42, 14]
195
+ },
196
+ initsequence=(
197
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x13), (0xEF, 0x08), (0xFF, 0x77, 0x01, 0x00, 0x00, 0x10), (0xC0, 0x3B, 0x00),
198
+ (0xC1, 0x0B, 0x02), (0xC2, 0x07, 0x02), (0xCC, 0x10), (0xCD, 0x08),
199
+ (0xB0, 0x00, 0x11, 0x16, 0x0e, 0x11, 0x06, 0x05, 0x09, 0x08, 0x21, 0x06, 0x13, 0x10, 0x29, 0x31, 0x18),
200
+ (0xB1, 0x00, 0x11, 0x16, 0x0e, 0x11, 0x07, 0x05, 0x09, 0x09, 0x21, 0x05, 0x13, 0x11, 0x2a, 0x31, 0x18),
201
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x11), (0xB0, 0x6d), (0xB1, 0x37), (0xB2, 0x81), (0xB3, 0x80), (0xB5, 0x43),
202
+ (0xB7, 0x85), (0xB8, 0x20), (0xC1, 0x78), (0xC2, 0x78), (0xD0, 0x88), (0xE0, 0x00, 0x00, 0x02),
203
+ (0xE1, 0x03, 0xA0, 0x00, 0x00, 0x04, 0xA0, 0x00, 0x00, 0x00, 0x20, 0x20),
204
+ (0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00),
205
+ (0xE3, 0x00, 0x00, 0x11, 0x00), (0xE4, 0x22, 0x00),
206
+ (0xE5, 0x05, 0xEC, 0xA0, 0xA0, 0x07, 0xEE, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00),
207
+ (0xE6, 0x00, 0x00, 0x11, 0x00), (0xE7, 0x22, 0x00),
208
+ (0xE8, 0x06, 0xED, 0xA0, 0xA0, 0x08, 0xEF, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00),
209
+ (0xEB, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00),
210
+ (0xED, 0xFF, 0xFF, 0xFF, 0xBA, 0x0A, 0xBF, 0x45, 0xFF, 0xFF, 0x54, 0xFB, 0xA0, 0xAB, 0xFF, 0xFF, 0xFF),
211
+ (0xEF, 0x10, 0x0D, 0x04, 0x08, 0x3F, 0x1F),
212
+ (0xFF, 0x77, 0x01, 0x00, 0x00, 0x13), (0xEF, 0x08), (0xFF, 0x77, 0x01, 0x00, 0x00, 0x00)
213
+ )
214
+ )
@@ -0,0 +1,64 @@
1
+ from esphome.components.mipi import DriverChip
2
+ from esphome.config_validation import UNDEFINED
3
+
4
+ from .st7701s import st7701s
5
+
6
+ wave_4_3 = DriverChip(
7
+ "ESP32-S3-TOUCH-LCD-4.3",
8
+ swap_xy=UNDEFINED,
9
+ initsequence=(),
10
+ width=800,
11
+ height=480,
12
+ pclk_frequency="16MHz",
13
+ reset_pin={"ch422g": None, "number": 3},
14
+ enable_pin={"ch422g": None, "number": 2},
15
+ de_pin=5,
16
+ hsync_pin={"number": 46, "ignore_strapping_warning": True},
17
+ vsync_pin={"number": 3, "ignore_strapping_warning": True},
18
+ pclk_pin=7,
19
+ pclk_inverted=True,
20
+ hsync_front_porch=210,
21
+ hsync_pulse_width=30,
22
+ hsync_back_porch=30,
23
+ vsync_front_porch=4,
24
+ vsync_pulse_width=4,
25
+ vsync_back_porch=4,
26
+ data_pins={
27
+ "red": [1, 2, 42, 41, 40],
28
+ "green": [39, 0, 45, 48, 47, 21],
29
+ "blue": [14, 38, 18, 17, 10],
30
+ },
31
+ )
32
+ wave_4_3.extend(
33
+ "ESP32-S3-TOUCH-LCD-7-800X480",
34
+ enable_pin=[{"ch422g": None, "number": 2}, {"ch422g": None, "number": 6}],
35
+ hsync_back_porch=8,
36
+ hsync_front_porch=8,
37
+ hsync_pulse_width=4,
38
+ vsync_back_porch=16,
39
+ vsync_front_porch=16,
40
+ vsync_pulse_width=4,
41
+ )
42
+
43
+ st7701s.extend(
44
+ "WAVESHARE-4-480x480",
45
+ data_rate="2MHz",
46
+ spi_mode="MODE3",
47
+ color_order="BGR",
48
+ pixel_mode="18bit",
49
+ width=480,
50
+ height=480,
51
+ invert_colors=True,
52
+ cs_pin=42,
53
+ de_pin=40,
54
+ hsync_pin=38,
55
+ vsync_pin=39,
56
+ pclk_pin=41,
57
+ pclk_frequency="12MHz",
58
+ pclk_inverted=False,
59
+ data_pins={
60
+ "red": [46, 3, 8, 18, 17],
61
+ "green": [14, 13, 12, 11, 10, 9],
62
+ "blue": [5, 45, 48, 47, 21],
63
+ },
64
+ )