之前我们已经介绍过如何通过shield配置并编译Abrobot ESP32C3 OLED的zephyr OS。
也讲解过了OLED上CFB的显示原理。
本文利用现有zephyr的sample(zephyr/samples/basic/button)来编写一个sample。用户可以通过板载按钮控制led灯状态,同时把状态更新到OLED屏幕上。每次按钮按下,led就会点亮或者熄灭,同时状态显示在屏幕上。
添加gpio button和gpio led到专属的shield配置文件(abrobot_sh1106_72x40)
通过原理图可知,abrobot的rst2按钮使用的是gpio 9,蓝色led使用的是gpio 8。
添加"user_button"为gpio 9到“gpio_keys”,“led_act”为gpio 8到“leds”。
修改sample代码
对“zephyr/samples/basic/button/”做如下修改
1. 在"prj.conf”中 enable “CONFIG_CHARACTER_FRAMEBUFFER” 和 “CONFIG_DISPLAY”
2. 在“main.c”中
加入init_display初始化oled display设备和CFB
加入display_msg来修改CFB同时发送到oled display ram
在button callback中切换led的状态
在main loop中更新led的状态
编译zephyr sample
使用“west build -p auto -b esp32c3_042_oled --shield abrobot_sh1106_72x40 samples/basic/button/”编译并烧录到abrobot esp32c3 oled board上,具体烧录方法参考。优快云
重启运行后,OLED显示“Press Button”等待用户输入,蓝色led初始点亮。
当用户第一次按下button后,第一次会点亮led,同时屏幕显示“LED On”。
再次按下button,led熄灭,屏幕显示“LED Off”。