Hello Do you have video how to start debug session because my connection fails?
@thepullupresistor17 күн бұрын
Hi. Sorry, but I don't have any specific videos on that. I'm sure you've already checked the Zephyr documentation at docs.zephyrproject.org/latest/develop/west/build-flash-debug.html, and if so you may want to request some help on the Zephyr users email list lists.zephyrproject.org/g/users or discord channel: discord.com/invite/Ck7jw53nU2 Good luck and I hope you're able to resolve your issue!
@mehmetkendi6067Ай бұрын
Thank you very much!
@duboislisa6036Ай бұрын
When I try to west build I have some errors like : error: '__device_dts_ord_DT_N_NODELABEL_blinking_led_P_gpios_IDX_0_PH_ORD' undeclared here (not in a function) 96 | #define DEVICE_NAME_GET(dev_id) _CONCAT(__device_, dev_id) | ^~~~~~~~~ And zephyr/include/zephyr/devicetree.h:196:36: error: 'DT_N_NODELABEL_blinking_led_P_gpios_IDX_0_VAL_pin' undeclared here (not in a function) 196 | #define DT_NODELABEL(label) DT_CAT(DT_N_NODELABEL_, label) | ^~~~~~~~~~~~~~~ Any ideas ? :(
@thepullupresistorАй бұрын
Nearly a year and a half has passed since I uploaded my last video tutorial on KZbin. This long delay was mostly due to work, family commitments and some health issues. Please don't worry, I'm fine, just busy. I've been really happy to receive encouragements and requests to continue making more tutorials from so many of you, but I also feel bad for leaving the Zephyr/ESP32 series undone in the middle of the driver development mini-series. Sorry to all of you who have been patiently waiting for a follow-up! It seems that time has caught up with me, and with the release of Zephyr v4.0, there is a new stepper driver API and implementation for the Darlington transistor motor driver board that I used as an example in video 6. In the light of these developments, my half-finished draft content for videos 7 and 8 is no longer relevant and I have decided that I will not try to make those episodes anymore. I'm truly sorry for the many of you who have been awaiting the follow-ups! Apart from getting comfortable with the Devicetree model, I think the macro-magic involved in making Zephyr drivers is a major barrier to many hobbyist embedded developers (like me). Maybe I'll return to this in the future, but no promises. Phew! That was a big weight off my shoulders :-) Going forward, I do want to get back to making tutorials, but I have yet to decide on a project. Hopefully it will happen sooner rather than later. Also, I have just signed-up for an account at Bluesky, so I'll try to be better at providing more frequent posts and updates there. Would love to get to know more people and chat about embedded development on what seems to be a very promising social media platform. You can find me here on Bluesky: bsky.app/profile/pullupresistor.com Thanks again for reading this post, and my apologies again for letting you down on the Zephyr driver series.
@roronoazoro8349Ай бұрын
Just finished this video and was looking for the next part. Glad to know you are okay. Please continue this series if you can make some time. This will help a lot.
@sanupamu2 ай бұрын
Sir that much of the configuration is out of my limitations😢😢😢. I do prefer Arduino. Are the Arduino IDE suitable for industrial areas?
@thepullupresistorАй бұрын
I also started my hobbyist electronics journey with Arduino and I think they are wonderful! As long as that platform meets your needs, I think that's great. I don't work professionally with embedded systems, so I don't really know much about whether the Arduino IDE is used in industry. From what I've seen, I imagine that vendor provided IDEs and general editors like VSCode are more heavily used outside of hobbyist tinkering, but I might be wrong. As for me, I mainly use Emacs...
@knowledgerepublik2 ай бұрын
The best Zephyr series of videos I have watched to date ... great job , Thank you !
@thepullupresistorАй бұрын
Wow, thanks! Really happy to hear that.
@BillBonney3 ай бұрын
Thanks for the great tutorials. It's really great way to ground your initial understanding of how the device tree works and the files are interrelated. 👍Look forward to further lessons (though I'm creating my own chapter 2/3 to the stepper motors!) For those stuck on the OLED Display and especially if you have just 'snow' displayed, you are likely to have purchased an SH1106 variant. It has a 132x64 RAM layout. No worries though, on the latest 3.7 SDK and 0.16.8 libraries you can solves in by setting in your overlay the `compatible = "sinowealth,sh1106"` and all should be good. Hope that helps! :)
@thepullupresistorАй бұрын
@BillBonney Thank you so much for the great feedback and also for providing additional help for people who are using the SH1106 (I don't have one myself). Also, due to the release of Zephyr 4.0 with a new stepper API and driver for the Darlington pair included, I have regretfully decided not to pursue chapters 2/3... I've provided a bit more background in the pinned post of video 6 if you're interested. Thank you again!
@StefanSchmidt-c2o3 ай бұрын
"Uh, jackpot!" (17:14) 🙂 Great video, especially explaining an approach on how to find the required information!
@thepullupresistorАй бұрын
Glad you enjoyed it! Strangely, not everyone is as enthusiastic about my sense of humour :-)
@mrizky0993 ай бұрын
I've just started with Zephyr RTOS. I'm glad that I found the tutorial series about Zephyr on this channel. I've been following the whole series using a different board, STM32WB55 from WeAct, and it is still working. I learned a lot from this tutorial, especially how to see and fix errors. Really, thank you very much.
@thepullupresistorАй бұрын
Great to hear that you found the material useful also on other platforms. I've also found myself using more and more STM32 parts for my project, but I haven't tried running Zephyr on it yet. That is definitely something I want to try now after your comment! Thank you!
@hj30283 ай бұрын
Great work!
@thepullupresistorАй бұрын
Thank you very much!
@roldanmarco18564 ай бұрын
Waiting for the next chapters
@thepullupresistorАй бұрын
Hi @roldanmarco1856. I'm very sorry to disappoint you, but due to my other commitments and the release of Zephyr 4.0 now including a stepper motor driver API and driver implementations including the Darlington driver board I used, I've decided not to continue this particular series. You can see a longer explanation in the pinned comment on top of this video. Again, really sorry about leaving you hanging and disappointing you!
@QAYWSXEDCCXYDSAEWQ4 ай бұрын
This is super cryptic programming, truly for bit twiddlers
@thepullupresistorАй бұрын
Thank you, that's a really interesting observation. I guess it depends on ones perspective. I find Zephyr to have a lot of high-level abstractions compared to what I am used to from 8-bit MCUs like ATMegas where we definitely do a lot of bit twiddling! :-) Would love to understand more about what perspective you're coming from if you'd care to share.
@kumu20244 ай бұрын
coming from MbedOS , you see how easier was MbedOS .. Sad that they killed mbed OS.
@thepullupresistorАй бұрын
Thank you for the comment. I haven't tried Mbed OS myself, but I agree that different projects call for different levels of abstractions and control. I only do embedded programming as a hobbyist, but I suspect that Zephyr will be very beneficial for larger projects where there are multiple developers involved and there is a need for flexibility in changing out the underlying hardware, even between different CPU architectures.
@gastonmelo64734 ай бұрын
u deserve a oscar man for the way u explain°!!!!
@thepullupresistorАй бұрын
Wow, that's the kindest compliment I think I've received on this channel :-)
@lxw52315 ай бұрын
thank you for clear tutorial. I followed the instructions and could not build. with latest zephyrproject 3.7.99, and /home/x/zephyr-sdk-0.16.8_linux-x86_64.tar.xz first it asks for prj.conf file. After I copied a prj.conf from ~zephyrproject/zephyr/samples/hello_world/ west build again. It complain, can't find zephyr.h file which included in the main.c. I searched the / folder. did not find zephyr.h file.
@thepullupresistorАй бұрын
Sorry for my very late reply. I hope that you've been able to resolve your issues by now?
@eeonech65655 ай бұрын
I am sorry to tell, but this software solution is ridiculous. If i want to work with hardware at low level - i work with hardware at low level, using vendor's supplied HAL. But this is... Beyond. You adding more low level abstraction in top of low level abstraction which is LOL.
@thepullupresistorАй бұрын
Thank you for your comment, and I agree that Zephyr is probably not the ideal solution for every embedded projects. Personally, I mainly use the STM32 HAL for 32-bit and AVR for 8-bit projects. I think that Zephyr can be a much better fit for very large projects with multiple programmers and the need for really strong separation between the firmware and the underlying hardware. Zephyr really makes it easy to swap between different MCUs and even MCU architectures without changing a single line of firmware code (due to the Devicetree model which is borrowed from Linux). Also, of course, my examples in these videos are truly ridiculous and only meant for beginners to learn the principles of how Zephyr works :-) I would never choose Zephyr (or any other RTOS) to only blink an LED or run a single stepper motor. In any case, thank you for sharing your thoughts and I appreciate it.
@inaamulhaq58665 ай бұрын
dude is a genius, life saver
@thepullupresistorАй бұрын
Thank you! Hope you were able to do what you intended to!
@robothane5 ай бұрын
this was very well recorded lesson. But we want the next ones please. 🥺
@thepullupresistorАй бұрын
Hi @robothane Thank you very much for your kind works. Unfortunately, due to other commitments and the release of Zephyr 4.0 now including a stepper motor driver API and driver implementations including the Darlington driver board I used, I've decided not to continue this particular series. You can see a longer explanation in the pinned comment on top of this video. Again, really sorry about leaving you hanging and disappointing you!
@gianlucalocri5 ай бұрын
Hi! new subscriber here, just started with zephyr! Your videos are a real goldmine! I'm looking forward to the next chapters hoping you can find some time to continue with this kind of content!
@thepullupresistorАй бұрын
Hi @gianlucalocri Thank you very much for your praise, it makes me really happy to know that people find these videos useful. Unfortunately, due to other commitments and the release of Zephyr 4.0 now including a stepper motor driver API and driver implementations including the Darlington driver board I used, I've decided not to continue this particular series. You can see a longer explanation in the pinned comment on top of this video. Again, really sorry about leaving you hanging and disappointing you!
@mohibullah62156 ай бұрын
why my brain is hurting? How can one memorize so many things...
@thepullupresistor6 ай бұрын
I certainly can't memorize it all! In fact, one of the main reasons I made these videos on Zephyr was so that I could come back and watch them again myself when I've forgotten how to do certain things. I've had to do that many, many times! Otherwise, my brain would hurt, too! :-)
@mohibullah62156 ай бұрын
@@thepullupresistor I was feeling demotivated. Thanks for the reassurance.
@solowplaysmc90136 ай бұрын
At 18:35 , you put compatible = “pwm-leds”; Would this not be compatible=“espressif, esp32-ledc”? If not where did you get this pwm-leds from. Otherwise very good video though :)
@thepullupresistor6 ай бұрын
That's a great question, thank you! You can certainly use the espressif,esp32-ledc compatible directly if you would like. However, using pwm-leds adds another layer of abstraction so that you could easily change the underlying microcontroller to another family or even manufacturer, without having to make any change to the source code, only a few changes in the devicetree. This comes back to the concept of separating the application code from the hardware that Zephyr is trying to do. If you have a look at the generated devicetree for the application under build/zephyr/zephyr.dts, you can see that the pwmleds node (using the pwm-leds compatible) refers to the node &ledc in its pwms property. If you look up the ledc node in the same file, you will see that it indeed uses the espressif,esp32-ledc compatible: ledc0: ledc@3ff59000 { compatible = "espressif,esp32-ledc"; ...... So, we are just using an extra layer of indirection to separate application code from hardware. Does that make sense? Sorry if I misunderstood your question, and thanks again for making a great point!
@solowplaysmc90136 ай бұрын
@@thepullupresistor Thank you very helpful sir.
@noweare16 ай бұрын
Seems like a lot to go through. Is their any advantage of using Zephyr instead of the esp-idf with freeRTOS already integrated ? Does Zephyr use its own IDE ?
@thepullupresistor6 ай бұрын
I think it depends on your specific situation. In particular, I think that Zephyr offers a good way to separate application code and hardware configuration, which could be important for large projects and projects that are looking at using more than one microcontroller family, for example. However, I program microcontrollers as a hobby, so Zephyr is more of a fun learning opportunity for me. And, yes, I feel that there is a long and steep learning curve, which is why I started making some of these tutorial videos so that hopefully my (many) mistakes could help someone else have a smoother learning journey. For my hobby projects, I mainly use Zephyr now for 32 bit projects (STM32, ESP32, RP2040) and avr-libc for 8 bit projects. And even when using Zephyr on ESP32, I can always use the esp-idf HAL directly if I need to. As for the question about an IDE, as far as I know there is not one "official" IDE for Zephyr, but CLion and VS Code seem to be popular. I think most modern IDEs should be able to handle the CMake-based workflow. Personally I use a combination of Emacs and the Zephyr CLI tool called west, together with OpenOCD and GDB. This is just my personal view, and I'm not associated with the Zephyr Project in any way, so you will probably get better answers and more diverse viewpoints by asking in the Zephyr forums online.
@SandhanSarma6 ай бұрын
The series is so informative, I have been waiting for Part 7 and many more that are yet to come.
@jayakrishnanharikumaran6767 ай бұрын
Currently we only have pin 25 specified in the blinking_leds port. What if we had more than one pin in the port? would all gpios defined in that port toggle?
@milosjovanovic76787 ай бұрын
Very good approach! It was easy to follow! Great series! Great job, just keep going!🔥 Thank you!
@sametbrhan9 ай бұрын
It is a great video. Pls keep making zephyr series. And also can you focus on connectivity topics, such as a BLE example?
@thepullupresistorАй бұрын
@sametbrhan Thank you very much! Sorry for taking so long to get back to you, and with bad new too boot... Unfortunately, due to other commitments and the release of Zephyr 4.0 now including a stepper motor driver API and driver implementations including the Darlington driver board I used, I've decided not to continue this particular series. You can see a longer explanation in the pinned comment on top of this video. Again, really sorry about leaving you hanging and disappointing you!
@sametbrhanАй бұрын
@@thepullupresistor No problem, I stopped learning Zephyr months ago.
@MrMKFreak9 ай бұрын
Fantastic series, great introcution into using Zephyr OS and how to go about facing challanges during development. Loving this series
@thepullupresistor9 ай бұрын
Thank you very much! :-) You made my day.
@mlann23339 ай бұрын
I've run through the tutorial here but when I try to build I get this error message: west: unknown command "build"; do you need to run this inside a workspace? Any ideas ? I'm running this command from the helloworld folder and not src.
@thepullupresistor9 ай бұрын
Sorry to hear that you're facing this trouble. Could you please try to run the shell script to setup the Zephyr environment? On Linux/MacOS you can run ". ~/zephyrproject/zephyr/zephyr_env.sh", assuming that your Zephyr installation is in the ~/zephyrproject directory. If you are on Windows, the equivalent script is zephyr_env.cmd in the same directory. I just tried it on my system (Debian 12) and it works. Please let me know if you're able to fix the issue. Thank you.
@mlann23339 ай бұрын
@@thepullupresistor It works, thank you !
@chiao910310 ай бұрын
can i ask you how to apply an online source file on esp32 with zephyr?
@zhenghuilee917211 ай бұрын
The video series are really helpful, I'm looking forward to the next chapters.
@thepullupresistor10 ай бұрын
Thank you! Working on the next video now, so fingers crossed :-)
@luizab8911 ай бұрын
Thank you for your content on Zephyr. I learned a lot. It was very didactic and well constructed. I hope you find time to continue with your channel. I'm trying to work with various types of sensors here.
@thepullupresistor10 ай бұрын
Glad to hear that you found the videos useful. Good luck with your sensor projects!
@voytek_two_thousand11 ай бұрын
how do I connect the esp320 to the pc to download the code
@thepullupresistor10 ай бұрын
Sorry if I misunderstand your question, but you can use any of the supported methods to program your ESP32 board. Personally, I use the ESP-Prog board because it has JTAG and serial (docs.espressif.com/projects/espressif-esp-iot-solution/en/latest/hw-reference/ESP-Prog_guide.html)
@koxu25cm11 ай бұрын
For people wondering why overlay is not included into the final dts file, you need to include this .overlay in CMakeLists with for example "set(DTC_OVERLAY_FILE "esp32.overlay")"
@thepullupresistor10 ай бұрын
Thank you for sharing that insight with everyone! I believe that Zephyr changed the board naming last year, so that the esp32.overlay file was not automatically picked up. Currently, I usually just call my overlay file app.overlay instead of esp32.overlay, as per the manual here: docs.zephyrproject.org/latest/build/dts/howtos.html#set-devicetree-overlays Thanks again for taking the time to help anyone facing similar issues.
@ashwin372 Жыл бұрын
can you please make a a tutorial on vim setup that you have?
@thepullupresistor11 ай бұрын
Thank you for your request. However, I use Emacs in these videos, not Vim (although I do use vi on some machines where Emacs is not installed). Sorry to disappoint ;-)
@begoodbehappy-2691 Жыл бұрын
can you please use teensy board to explain the project
@thepullupresistor11 ай бұрын
Thank you for your suggestion. Unfortunately, I don't plan on getting a teensy board any time soon.
@steffenspathe4327 Жыл бұрын
If you are using a board with non default pins/gpios used for the i2c connection, you need to specify the correct gpios in the overlay file as well. E.g. for my wemos boards with oled display and battery holder, this worked in the end: &pinctrl { i2c0_default: i2c0_default { group1 { pinmux = <I2C0_SDA_GPIO5>, <I2C0_SCL_GPIO4>; }; }; };
@thepullupresistor11 ай бұрын
Thank you for sharing!
@philippsteiner1987 Жыл бұрын
Very useful video! Please keep on with your extraordinary tutorials!
@thepullupresistor11 ай бұрын
Thank you very much for your kind words.
@philippsteiner1987 Жыл бұрын
Very useful and great Tutorial! Your explanations are really good and I appreciate your calm and clear voice. Your channel is sadly underrated, but I hope you keep going with your excellent work!
@thepullupresistor11 ай бұрын
Thank you, and I hope to find more time in 2024 to continue making videos. Fingers crossed :-)
@philippsteiner1987 Жыл бұрын
Great Tutorial! Please keep up your excellent work!
@philippsteiner1987 Жыл бұрын
Great Tutorial! Thanks a lot!
@derrickkwon2232 Жыл бұрын
plz keep making this video series. This is really helpful.
@thepullupresistor11 ай бұрын
Thank you for your feedback. I hope to get back to making more videos in 2024.
@iftekharulalam38 Жыл бұрын
great tutorial
@SaieenTwist Жыл бұрын
Hello, Do you know where to place the overlay file if I am using PlatformIO in Windows?
@thepullupresistor11 ай бұрын
Sorry, but I don't use PlatformIO or Windows so I don't know. Good luck in finding an answer to your problem.
@mytechnotalent Жыл бұрын
this causes an error and an inability to compile
@thepullupresistor Жыл бұрын
Thank you for highlighting this. It seems like CONFIG_SSD1306_DEFAULT has been removed from Zephyr in 3.5.0. You can see a note about it in the migration guide (docs.zephyrproject.org/latest/releases/migration-guide-3.5.html#device-drivers-and-device-tree). Fortunately, the fix should be easy, simply remove the CONFIG_SSD1306_DEFAULT line from your prj.conf and you should be good to go. Please let me know if that works for you.
@mytechnotalent Жыл бұрын
warning: attempt to assign the value 'y' to the undefined symbol SSD1306_DEFAULTParsing
@thepullupresistor Жыл бұрын
Please see my reply to your other comment. Hope the fix works for you.
@mytechnotalent Жыл бұрын
@@thepullupresistor thank you for taking the time to help! I am almost there however my display is fading in and out what appears to be random snow or pixels on the screen rather than the image. I have tried changing the address from 0x3c to 0x3d and it did not work so I am almost there just need to figure this out.
@mytechnotalent Жыл бұрын
@@thepullupresistor The issue was I had a 1.3" SSD1306 that was displaying as I mentioned, snow, however I found a .96" one and it works perfectly! Do you happen to know why the larger screen produced snow? It appears to be the same 128x64?
@thepullupresistor Жыл бұрын
@@mytechnotalent Glad to hear that you found out the reason behind it. I'm afraid I haven't come across the 1.3" version so can't be of much help there, I'm afraid. If you find a datasheet you might be able to compare the I2C commands between the two displays from their commands, without having to get out the logic analyzer... Good luck!
@SaieenTwist Жыл бұрын
I am your 1000th subscriber.
@thepullupresistor Жыл бұрын
Oh wow. Thank you for letting me know :-) I had no idea so many people would be interested in this topic!
@fouadayoubi3727 Жыл бұрын
Thank you for your informative videos. Why is this information given twice: "gpios = <&gpio0 25 GPIO_ACTIVE_HIGH>" in the overlay file and "ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE)" in main.c? Isn't it redundant?
@thepullupresistor Жыл бұрын
Thank you for the feedback and the excellent question. Whilst GPIO_ACTIVE_HIGH and GPIO_OUTPUT_ACTIVE look quite similar, their meaning is slightly different. In the devicetree overlay file, GPIO_ACTIVE_HIGH says that this pin will have the logical value of 1 (ACTIVE) when the voltage level is HIGH. So, for example, if the voltage on that pin is 3.3V or 5V (depending on your power supply), Zephyr will treat it as a logical value 1 (ACTIVE). If the voltage is at 0V (ground), Zephyr will treat the logical value as 0. If, instead, we had configured the devicetree overlay file to say GPIO_ACTIVE_LOW, then Zephyr would treat 3.3V/5V as a logical 0, and 0V as logical 1 (ACTIVE). Now, as for the GPIO_OUTPUT_ACTIVE flag, this tells the MCU to treat the GPIO pin pointed to by &gpio0 25 as an output AND set it to logical value 1 (ACTIVE). Since we have configured GPIO_ACTIVE_HIGH in our devicetree, this means that the voltage will be set to 3.3V/5V. If, instead, we had configured the devicetree with GPIO_ACTIVE_LOW, then the MCU would set the voltage to 0V, because this is then the logical value 1 (ACTIVE). Sorry for the long-winded explanation, but hopefully it makes sense. Please let me know if you're OK or if I misunderstood your question. Thanks again!