Very VERY timely and helpful! I'm an Arduino hacker trying to get acquainted with this RPi stuff and tutorials like this are ideal for an old developer trying to cope with a new and unfamiliar set of tools. Your CMake boilerplate probably saved me days of aggravating trial and error. Count me among your grateful subscribers.
I'm learning I2C using the Pico and micropython and your video definitely helped me! I was surprised that the micro python and c functions are nearly identical apart from naming, and my next obvious step is implement what I wrote in C.
Nice clear video, thanks! May I suggest a possible improvement, instead of printing an error in an infinite loop, it's a relatively simple change to encapsulate the chip ID check code inside the loop, then exit upon success. That way if you get your SCL & SDA wires mixed, which I invariably do, you don't have to reset the entire board to get it to work again, simply flip the wires and it'll begin working (yes even when plugged in, it's fine!). Same with the operational code to make it robust to I2C comms errors.
Nicely produced video and clearly explained. Thank-you. In my retirement I'm getting into electronics and you explained in a way this old guy could understand!
Great thank you! I didn't realized how much of work (that can make really fun) has taken from coders when the Arduino setting came up with all the predefined libraries. Now I guess I definitely will use the C/C++ SDK for my 2nd Pico. Great video and series 👍
Very clear presentation, however as a guy who uses assembler, relying on hardware to work is very dodgy practice and is not good for robust software. If the I2C device or bus fails your software will hang without so much as a howdy doody. Plus I2C devices are very slow compared to main microcontrollers and you usually want to be doing other things during each bit of data so is ideally handled in an interrupt. Such concepts may be too advanced to explain in 20 minutes here though so to being new to C on Pico, this is very good, thank you.
Thanks for the clear explanation. I wonder if you could do a video for I2S, I'm interested in using the Pico for audio, maybe for creating a modular synthesiser with each Pico being a module and I2S used to communicate between them.
Interesting. I can see you using one thing but I'd have liked to have seen a demonstration with two. Example, I have the BMP280, the user ID, the IIC I2C SPI MPU-6500 and the L76B. That's all aimed toward making a self-navigating drone. I might also add sonar. But I use Python not C.
10:26 regarding the code: reg, then read then write functions: I need some clarity please: Is this correct idea??? The write function points at register 0x00 holds the bus using "true", so when the read function executes its looking at reg 0x00. These functions are confusing: there is physical connection point to pico: i2c0, device address 0x28 in your case, then a buffer to store the read information: In my head it should be: i2c0, device address, register (we want to read), buffer (to store the read), ect. How do I point at the registers since read and write only have device, data or device, buffer???
I appreciate your channel, there is not much content on the PI Pico writtern in "C", this may change now that the Arduino IDE is supporting the PICO. Would you consider doing a video on added a SPI Wiznet W5100 Ethernet Breakout board?
At 13:38 I am very confused about the data you are writing to the i2c. According to the specification, wouldn't this trigger a reset (0x40), and your next command trigger a self-test (0x01). Maybe you could clarify it for me, I am relatively new to this topic.
keep the micropython uf2 close, could be useful to check if the i2c device is properly connected, only needs a few lines of code to scan the i2c bus, can be done in the repl ... i expect . bus 1, pin 2 sda/3 scl (board pin 4+5) or bus 0, pin 8 sda, 9 scl (board pin 11+12), or any other duo as seen on Raspberry-Pi-Pico-Pinout-Diagram.jpg
Which part are you referring too, the general i2c communication or the BNO005 functions? I will have a look into putting the I2C code into a simple library but I am sure someone will have beaten me to it!
Does anyone Haha e the issue ‘module ‘board’ has no module I2C’ ? I am running a Pi 4, and using Python. Strangely enough the exact same file works on my other Pi.
Very nice video! at 12:16 you mentioned a Binary but I just don get it, where you got it from? btw 0x40 is 1-000-000 in binary, is that what you meant? Thanks :D
Thanks Bro, Cool Explanations. Bro we drag and drop code to the rasperry pi and the code works on it. And can we get back this code from pico? How we can protect our code? For example i heve writetten the code which is I don't want that other can copy my code. How we can block or protect our code? Thanks
Wow, crystal clear explanation, thanks for that content. One quick question, do you know if there's any chance to print through the micro-usb port from the raspberry pi pico?
Glad you found the video helpful and clear! Yes you can print from the micro USB port over usb serial via the printf function (if I am understanding your question correctly). I have a video about USB serial on my channel which covers this.
Actually 0X40 in binary is 01000000. That is, he is setting the bit 6 to 1 and it implies the to "reset interrupt status bits", the bit 7 is set to zero that implies to use the "internal oscillator" and all the other bits are set to 0 as well.
I am having problems myself trying to debug the Pico directly from a PC. It is currently working fine using another Pico but not directly to a PC. When I solve this, I will be sure to make a video covering this. Thank you for your suggestion!
Could you consider to explain how the data IO works, for example by using 2 Pico's, one a host and one a client, or on itself. I am still confused about the bit order. Thanks!
Yes this is completely possible, and fairly simple to do! If you are using PuTTY you can use the logging function to directly save the output as a CSV. This tutorial is for an arduino but is practically the same for the Pico: www.circuitbasics.com/logging-arduino-data-to-files-on-a-computer/