{"id":1169,"date":"2026-09-23T18:42:57","date_gmt":"2026-09-24T01:42:57","guid":{"rendered":"https:\/\/sysprogs.com\/tutorials\/?p=1169"},"modified":"2026-09-23T18:42:57","modified_gmt":"2026-09-24T01:42:57","slug":"developing-raspberry-pi-pico-projects-with-codevroom","status":"publish","type":"post","link":"https:\/\/sysprogs.com\/CodeVROOM\/tutorials\/rp2040\/","title":{"rendered":"Developing Raspberry Pi Pico Projects with CodeVROOM"},"content":{"rendered":"<p>This tutorial shows how to create, build and debug a basic project for the Raspberry Pi Pico (RP2040) using the PicoSDK and CodeVROOM. We will be running CodeVROOM on Linux, but the same steps work for Windows and MacOS as well.<\/p>\n<ol>\n<li>Start CodeVROOM if you already created other projects with it, they will appear in the startup screen. Otherwise, click File-&gt;New-&gt;Project to begin:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/01-new.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1170\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/01-new.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/01-new.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/01-new-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/01-new-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/01-new-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/li>\n<li>Select the Raspberry Pi Pico project wizard:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/02-pico.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1171\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/02-pico.png\" alt=\"\" width=\"810\" height=\"425\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/02-pico.png 810w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/02-pico-300x157.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/02-pico-768x403.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/02-pico-390x205.png 390w\" sizes=\"(max-width: 810px) 100vw, 810px\" \/><\/a><\/li>\n<li>The first page of the wizard allows selecting the PicoSDK version. CodeVROOM will automatically detect SDKs installed by the PicoSDK VS Code extension, but you can also install an SDK from scratch using the &#8220;install&#8221; button:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/03-getsdk.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1172\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/03-getsdk.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/03-getsdk.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/03-getsdk-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/03-getsdk-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/03-getsdk-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/li>\n<li>Pick the version you would like to install:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/04-ver-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1173\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/04-ver-1.png\" alt=\"\" width=\"800\" height=\"590\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/04-ver-1.png 800w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/04-ver-1-300x221.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/04-ver-1-768x566.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/li>\n<li>CodeVROOM will automatically clone the Git repository and will install the dependencies:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/05-git.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1174\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/05-git.png\" alt=\"\" width=\"500\" height=\"229\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/05-git.png 500w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/05-git-300x137.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/li>\n<li>Now you can select the target device and click &#8220;next&#8221;:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/06-installed.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1175\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/06-installed.png\" alt=\"\" width=\"870\" height=\"728\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/06-installed.png 870w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/06-installed-300x251.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/06-installed-768x643.png 768w\" sizes=\"(max-width: 870px) 100vw, 870px\" \/><\/a><\/li>\n<li>Select the sample you would like to clone. In this tutorial we will clone the <strong>led_fade<\/strong> project from the SDK samples:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/07-sample.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1176\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/07-sample.png\" alt=\"\" width=\"870\" height=\"728\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/07-sample.png 870w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/07-sample-300x251.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/07-sample-768x643.png 768w\" sizes=\"(max-width: 870px) 100vw, 870px\" \/><\/a><\/li>\n<li>Finally, select the debug settings that work for your configuration:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/08-debug-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1177\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/08-debug-1.png\" alt=\"\" width=\"870\" height=\"728\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/08-debug-1.png 870w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/08-debug-1-300x251.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/08-debug-1-768x643.png 768w\" sizes=\"(max-width: 870px) 100vw, 870px\" \/><\/a><\/li>\n<li>You can use the Test button to automatically launch OpenOCD and verify that it can connect to the target:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/09-test.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1178\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/09-test.png\" alt=\"\" width=\"800\" height=\"628\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/09-test.png 800w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/09-test-300x236.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/09-test-768x603.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/li>\n<li>Once the project got created, you can build it (Ctrl-Shift-B on PC, Cmd-Shift-B on Mac):<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/10-built.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1179\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/10-built.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/10-built.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/10-built-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/10-built-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/10-built-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/li>\n<li>We will now use the live memory to observe how the fading works without stopping the target. It will be easier to do it if we move the variables into the global scope. Now you can run the program, hover the mouse over &#8220;fade&#8221; and instantly see the value. Click the graph button to plot it in real time:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/graph2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1180\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/graph2.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/graph2.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/graph2-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/graph2-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/graph2-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/li>\n<li>If you want to view multiple variables on the same graph, you would need to use the dedicated Graph window. Right-click on the value of &#8220;fade&#8221; and select &#8220;Add to graph&#8221;:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/addgraph.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1181\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/addgraph.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/addgraph.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/addgraph-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/addgraph-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/addgraph-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/li>\n<li>Do the same for the <strong>going_up<\/strong> variable. Note that CodeVROOM kept the recorded values of &#8216;fade&#8217; from the quick popup, but did not record it further until you added it to the graph:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/moveband.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1182\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/moveband.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/moveband.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/moveband-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/moveband-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/moveband-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a>Also, as the &#8216;fade&#8217; changes from 0 to 255, and &#8216;going_up&#8217; is either 0 or 1, looking at them together is not very convenient. You can fix it by moving &#8216;fade&#8217; to a separate band<\/li>\n<li>If the graphs have too many data points, they will appear blocky when zoomed out. You can zoom in with the mouse wheel, or pan the view with the middle mouse button to see the full details:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/info.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1184\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/info.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/info.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/info-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/info-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/info-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/li>\n<li>You can also check various hardware registers related to PWM via the <strong>Debug-&gt;Windows-&gt;Peripheral Registers<\/strong> view. Flagging individual registers as live will allow observing them without stopping the target:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/16-periph.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1185\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/16-periph.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/16-periph.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/16-periph-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/16-periph-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/16-periph-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/li>\n<li>You can edit various project properties (e.g. PicoSDK configuration variables) by selecting the &#8220;Properties&#8221; command in the project context menu:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/17-properties.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1186\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/17-properties.png\" alt=\"\" width=\"1366\" height=\"768\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/17-properties.png 1366w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/17-properties-300x169.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/17-properties-1024x576.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2026\/09\/17-properties-768x432.png 768w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>This tutorial shows how to create, build and debug a basic project for the Raspberry Pi Pico (RP2040) using the<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[64],"tags":[81],"_links":{"self":[{"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/posts\/1169"}],"collection":[{"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/comments?post=1169"}],"version-history":[{"count":1,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/posts\/1169\/revisions"}],"predecessor-version":[{"id":1187,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/posts\/1169\/revisions\/1187"}],"wp:attachment":[{"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/media?parent=1169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/categories?post=1169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/tags?post=1169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}