S&B Volcano vaporizer remote control with Pi Pico W
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
Thomas B 4fa5e53bfc bleak: ensure target temp and state changes are taking effect vor 4 Monaten
.github/workflows fix release workflows vor 10 Monaten
case case mod. now only a single bottom part. lcd and buttons are unprotected. vor 10 Monaten
conf wip stuff vor 11 Monaten
data fat fs no longer in RAM. mkfs as part of build process. page cache to still be able to write from usb or app. vor 11 Monaten
fatfs @ b11f089319 first building but not running state of C Pico SDK version vor 1 Jahr
fs wip stuff vor 11 Monaten
include add experimental influxdb support vor 4 Monaten
mcufont @ 9f3aa41b23 first building but not running state of C Pico SDK version vor 1 Jahr
pico-sdk @ 6a7db34ff6 first building but not running state of C Pico SDK version vor 1 Jahr
picowota @ 27b51989ba dont fallback to bootloader after user modified filesystem vor 11 Monaten
src add experimental influxdb support vor 4 Monaten
st7789 @ 1b211accf9 first building but not running state of C Pico SDK version vor 1 Jahr
test_bleak bleak: ensure target temp and state changes are taking effect vor 4 Monaten
test_micropython add bleak python implementation to master branch vor 6 Monaten
test_simplepyble tweak pc python workflows vor 4 Monaten
web-app gpl license vor 1 Jahr
.clangd add clangd and fix some linted warnings vor 6 Monaten
.gitignore add clangd and fix some linted warnings vor 6 Monaten
.gitmodules custom picowota fork to show stuff on lcd and use flash wifi credentials vor 11 Monaten
CMakeLists.txt add clangd and fix some linted warnings vor 6 Monaten
COPYING gpl license vor 1 Jahr
README.md bump version to 0.3 vor 10 Monaten
debug.sh license for scripts vor 1 Jahr
debug_swd.sh license for scripts vor 1 Jahr
flash.sh license for scripts vor 1 Jahr
flash_ota.sh add basic wifi to app vor 11 Monaten
flash_swd.sh license for scripts vor 1 Jahr
pack_data.sh fat fs no longer in RAM. mkfs as part of build process. page cache to still be able to write from usb or app. vor 11 Monaten

README.md

Pi Pico Volcano Remote Control Gadget

Firmware STLs

Supports:

  • workflows for the Volcano Hybrid
  • basic status and settings for Crafty+
  • some settings for Venty (untested)

For use with Raspberry Pi Pico W boards with the Waveshare Pico LCD 1.3 and the Pimoroni Pico Lipo Shim.

Adapted from the tinyusb-cdc-example, adc example, standalone client example, webserver example and my Trackball firmware.

python-test contains a similar app to the C version in the top level of the repo, but instead written for MicroPython on the Pico W. Unfortunately I had many performance and space problems with this, so I decided to rewrite it. web-app contains a script to conveniently fetch the original web app JS sources, for “reverse engineering”. case contains the OpenSCAD files of a 3D printed case for the device.

You can find the rendered STL files attached to the GitHub releases, as well as pre-compiled binaries to flash on the device.

Quick Start

When compiling for the first time, check out the required git submodules.

git submodule update --init
cd pico-sdk
git submodule update --init

Then do this to build.

mkdir build
cd build
cmake -DPICO_BOARD=pico_w ..
make -j4 gadget

And flash the resulting gadget.uf2 file to your Pico as usual.

For convenience you can use the included flash.sh, as long as you flashed the binary manually once before.

make -j4 gadget
../flash.sh gadget.uf2

This will use the mass storage bootloader to upload a new uf2 image.

For old-school debugging a serial port will be presented by the firmware. Open it using eg. picocom, or with the included debug.sh script.

For dependencies to compile, on Arch install these.

sudo pacman -S arm-none-eabi-gcc arm-none-eabi-newlib picocom cmake cxxtest

Proper Debugging

You can also use the SWD interface for proper hardware debugging.

This follows the instructions from the RP2040 Getting Started document from chapter 5 and 6.

For ease of reading the disassembly, create a debug build.

mkdir build_debug
cd build_debug
cmake -DPICO_BOARD=pico_w -DCMAKE_BUILD_TYPE=Debug ..
make -j4 gadget

You need a hardware SWD probe. This can be made from another Pico, see Appendix A in the document linked above. For this you need to compile the picoprobe firmware, like this.

git clone https://github.com/raspberrypi/picoprobe.git
cd picoprobe

git submodule update --init
mkdir build
cd build

PICO_SDK_PATH=../../../pico-sdk cmake ..
make -j4

cd ../.. # back to build_debug directory from before

And flash the resulting picoprobe.uf2 to your probe. Connect GP2 of the probe to SWCLK of the target and GP3 of the probe to SWDIO of the target. Of course you also need to connect GND between both.

You need some dependencies, mainly gdb-multiarch and the RP2040 fork of OpenOCD.

sudo apt install gdb-multiarch   # Debian / Ubuntu
sudo pacman -S arm-none-eabi-gdb # Arch Linux

git clone https://github.com/raspberrypi/openocd.git --branch rp2040 --recursive --depth=1
cd openocd

# install udev rules
sudo cp contrib/60-openocd.rules /etc/udev/rules.d
sudo udevadm control --reload-rules && sudo udevadm trigger

./bootstrap
./configure --enable-ftdi --enable-sysfsgpio --enable-bcm2835gpio
make -j4

cd .. # back to build_debug directory from before

Now we can flash a firmware image via OpenOCD.

./openocd/src/openocd -s openocd/tcl -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000" -c "cmsis_dap_vid_pid 0x2e8a 0x000c" -c "program gadget.elf verify reset exit"

And also start a GDB debugging session.

./openocd/src/openocd -s openocd/tcl -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000" -c "cmsis_dap_vid_pid 0x2e8a 0x000c"
arm-none-eabi-gdb gadget.elf
target extended-remote localhost:3333

load # program elf into flash
monitor reset init # put into clean initial state
continue # start program

These commands have also been put in the flash_swd.sh and debug_swd.sh scripts, respectively. They require the build_debug folder where you checked out and built OpenOCD. Here are some general GDB tips.

License

The firmware itself is licensed as GPLv3. I initially adapted it from my own Trackball project. It uses the Pi Pico SDK, licensed as BSD 3-clause, and therefore also TinyUSB, licensed under the MIT license. Some code is adapted from the TinyUSB examples. And the project uses the FatFS library, licensed as BSD 1-clause. Also included are the MCUFont library and the st7789 library, both licensed under the MIT license. It also uses the BTstack included with the Pico SDK, following their license terms. The included bootloader is picowota, licensed as BSD 3-clause. I’m also using the MicroPython DHCP server, licensed as MIT and included with picowota.

The case design is also licensed as GPLv3. It uses a Pi Pico case model licensed as CC-BY-NC-SA. But this is only used for visualization purposes and doesn’t influence the 3D model at all. The case design itself has initially been made by Kauzerei.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

See <http://www.gnu.org/licenses/>.