Hi there …
I’m new to Particle, and this is my first post on the forum, so just hoping the style and substance of this note comport with local norms.
I’m trying to build some simple tutorials for a course that I teach remotely. I’ve using Jupyter notebooks on Google Colab extensively for teaching data and computationally oriented courses, and am trying a few experiments to see if it could work with Particle, too.
Here’s a proof of concept demonstrating Colab with Tinker: https://colab.research.google.com/drive/1i0wWU-7SnZ19a6OGQN5XnckWlNQDtPR2#scrollTo=ERsWOhNw5NPg
Here’s a proof of concept demonstrating Particle cli on Colab: https://colab.research.google.com/drive/1eybJfx2naCsVBOjTbzEu6GEK6cHu-h5I#scrollTo=ERsWOhNw5NPg
This third attempt is s where the trouble starts: https://colab.research.google.com/drive/1GK5Ogga8ts8vfS9493wmEAExFZ3I3N7u#scrollTo=TcUKDiWOsvt1
There are some issues:
The documentation for the Particle cli library says to use the “add” command to download and install a library. See: https://colab.research.google.com/drive/1GK5Ogga8ts8vfS9493wmEAExFZ3I3N7u#scrollTo=TcUKDiWOsvt1 This seemed to have no effect in the notebook above. But “view” command did download and install a library. Is the documentation correct?
Compiling results in an "Found unsafe content Found: #include “/” error. I could find no documentation on how to override this message. Any advice?
I’m new to Particle, so these are likely newb errors. Any help would be appreciated.
Jeff
ScruffR
October 20, 2020, 12:01pm
2
Welcome to the community
For your first point, particle library add
will only add a dependency entry to the project.properties
file and the cloud build will then pull that referenced library in but the docs don’t tell otherwise either - no mention of downloading and installing the library AFAICT.
If you want to download the library (e.g. to tweak it for your project) you’d use particle library copy
which will place the library inside your project at its intended place (particle library view
will not do that).
For the second question it’s hard to tell without the code as I’m not going to sign up for the colab link
Thank you for explanation regarding “add” vs “copy”. It’s now clear that I’m not setting up the project correctly inside Colab, so will tackle that next and see if this will resolve my problems. Thanks.
ScruffR
October 20, 2020, 12:59pm
4
When running particle library add
or particle library copy
you should execute that from the location within your project folder where the project.properties
file resides.
If you haven’t got one of these you should use particle project create
to properly setup a new project structure.
1 Like
Thanks again. This advice has been spot on. I can create a project, add libraries, copy libraries to the /lib subdirectory, and compile an empty project. The problem now is that compiling fails because it can't find the library subdirectory. Here's the minimal file
#include "Grove_4Digit_Display"
void setup() {
}
void loop() {
}
Here's the message
Compiling code for argon
Including:
lib/Grove_4Digit_Display/src/Grove_4Digit_Display.h
lib/Grove_4Digit_Display/examples/NumberFlow/NumberFlow.ino
src/display4.ino
lib/Grove_4Digit_Display/src/Grove_4Digit_Display.cpp
project.properties
attempting to compile firmware
Compile failed: Processing lib/Grove_4Digit_Display/examples/NumberFlow/NumberFlow.ino
Processing src/display4.ino
Checking library Grove_4Digit_Display...
Installing library Grove_4Digit_Display 1.0.2 to lib/Grove_4Digit_Display ...
Library Grove_4Digit_Display 1.0.2 installed.
make -C ../modules/argon/user-part all
make[1]: Entering directory '/firmware/modules/argon/user-part'
mkdir -p target/
make -f ../../../modules/shared/nRF52840/build_linker_script.mk PREBUILD=1
make[2]: Entering directory '/firmware/modules/argon/user-part'
Creating target/platform_user_ram.ld ...
make[2]: Leaving directory '/firmware/modules/argon/user-part'
make -C ../../../user
make[2]: Entering directory '/firmware/user'
Building cpp file: src/display4.cpp
Invoking: ARM GCC CPP Compiler
mkdir -p ../build/target/user/platform-12-msrc/
arm-none-eabi-gcc -DSTM32_DEVICE -DnRF52840 -DNRF52840_XXAA -DPLATFORM_THREADING=1 -DPLATFORM_ID=12 -DPLATFORM_NAME=argon -DUSBD_VID_SPARK=0x2B04 -DUSBD_PID_DFU=0xD00C -DUSBD_PID_CDC=0xC00C -DSPARK_PLATFORM -g3 -gdwarf-2 -Os -mcpu=cortex-m4 -mthumb -mabi=aapcs -mfloat-abi=hard -mfpu=fpv4-sp-d16 -DINCLUDE_PLATFORM=1 -DSOFTDEVICE_PRESENT=1 -DS140 -DPRODUCT_ID=12 -DPRODUCT_FIRMWARE_VERSION=65535 -DOPENTHREAD_PROJECT_CORE_CONFIG_FILE="openthread-config-project.h" -DENABLE_FEM=1 -DNRF_802154_PROJECT_CONFIG="openthread-platform-config.h" -DRAAL_SOFTDEVICE=1 -D_WIZCHIP_=W5500 -DUSE_STDPERIPH_DRIVER -DDFU_BUILD_ENABLE -DLFS_CONFIG=lfs_config.h -DSYSTEM_VERSION_STRING=1.5.2 -DRELEASE_BUILD -I./inc -I../wiring/inc -I../system/inc -I../third_party/miniz/miniz -I../services/inc -I../third_party/nanopb/nanopb -I../communication/inc -I../hal/inc -I../hal/shared -I../hal/src/argon -I../hal/network/lwip/esp32 -I../hal/src/nRF52840 -I../hal/src/armv7 -I../hal/src/nRF52840 -I../hal/src/nRF52840/lwip -I../hal/src/nRF52840/freertos -I../hal/src/nRF52840/openthread -I../hal/src/nRF52840/mbedtls -I../hal/src/nRF52840/littlefs -I../hal -I../hal/network/api -I../hal/network/lwip -I../hal/network/lwip/posix -I../hal/network/openthread -I../hal/network/lwip/wiznet -I../hal/network/ncp -I../hal/network/ncp/at_parser -I../third_party/lwip/lwip/src/include -I../third_party/freertos/freertos/FreeRTOS/Source/include -I../third_party/nrf5_sdk/nrf5_sdk/external/freertos/portable/GCC/nrf52 -I../third_party/nrf5_sdk/nrf5_sdk/external/freertos/portable/CMSIS/nrf52 -I../third_party/openthread/openthread/include -I../third_party/openthread/openthread/src/core -I../third_party/openthread/openthread/examples/platforms -I../third_party/openthread/openthread/radio -I../third_party/openthread/openthread/radio/hal -I../third_party/openthread/openthread/radio/rsch -I../third_party/openthread/openthread/radio/rsch/raal -I../third_party/openthread/openthread/radio/rsch/raal/softdevice -I../third_party/wiznet_driver/wiznet_driver/Ethernet -I../gsm0710muxer/gsm0710muxer/include -I../platform/shared/inc -I../third_party/nrf5_sdk -I../third_party/nrf5_sdk/nrf5_sdk/components/toolchain/cmsis/include -I../third_party/nrf5_sdk/nrf5_sdk/modules/nrfx -I../third_party/nrf5_sdk/nrf5_sdk/modules/nrfx/drivers -I../third_party/nrf5_sdk/nrf5_sdk/modules/nrfx/drivers/include -I../third_party/nrf5_sdk/nrf5_sdk/modules/nrfx/hal -I../third_party/nrf5_sdk/nrf5_sdk/modules/nrfx/mdk -I../third_party/nrf5_sdk/nrf5_sdk/modules/nrfx/hal -I../third_party/nrf5_sdk/nrf5_sdk/modules/nrfx/drivers/src/prs -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/util -I../third_party/nrf5_sdk/nrf5_sdk/components/softdevice/s140/headers -I../third_party/nrf5_sdk/nrf5_sdk/components/softdevice/s140/headers/nrf52 -I../third_party/nrf5_sdk/nrf5_sdk/components/softdevice/common -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/fstorage -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/experimental_section_vars -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/atomic -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/crc32 -I../third_party/nrf5_sdk/nrf5_sdk/integration/nrfx/legacy -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/delay -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/log -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/log -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/log/src -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/experimental_section_vars -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/atomic -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/delay -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/queue -I../third_party/nrf5_sdk/nrf5_sdk/components/softdevice/common -I../third_party/nrf5_sdk/nrf5_sdk/components/softdevice/mbr/nrf52840/headers -I../third_party/nrf5_sdk/nrf5_sdk/components/softdevice/s140 -I../third_party/nrf5_sdk/nrf5_sdk/components/softdevice/s140/headers -I../third_party/nrf5_sdk/nrf5_sdk/components/softdevice/s140/headers/nrf52 -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/fifo -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/atomic_fifo -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/strerror -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/fstorage -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/atomic_flags -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/usbd -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/usbd/class/cdc -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/usbd/class/cdc/acm -I../third_party/nrf5_sdk/nrf5_sdk/components/ble/common -I../third_party/nrf5_sdk/nrf5_sdk/components/ble/nrf_ble_gatt -I../third_party/nrf5_sdk/nrf5_sdk/components/ble/ble_advertising -I../third_party/nrf5_sdk/nrf5_sdk/components/nfc/t2t_lib -I../third_party/nrf5_sdk/nrf5_sdk/components/nfc/platform -I../third_party/nrf5_sdk/nrf5_sdk/components/nfc/ndef/generic/message -I../third_party/nrf5_sdk/nrf5_sdk/components/nfc/ndef/generic/record -I../third_party/nrf5_sdk/nrf5_sdk/components/nfc/ndef/lauchapp -I../third_party/nrf5_sdk/nrf5_sdk/components/nfc/ndef/text -I../third_party/nrf5_sdk/nrf5_sdk/components/nfc/ndef/uri -I../third_party/nrf5_sdk/nrf5_sdk/external/nrf_cc310/include -I../third_party/nrf5_sdk/nrf5_sdk/external/utf_converter -I../third_party/littlefs/littlefs -I../platform/MCU/nRF52840/inc -I../dynalib/inc -Isrc -I./libraries -Ilib/Grove_4Digit_Display/src -I. -MD -MP -MF ../build/target/user/platform-12-msrc/display4.o.d -ffunction-sections -fdata-sections -Wall -Wno-switch -Wno-error=deprecated-declarations -fmessage-length=0 -fno-strict-aliasing -DSPARK=1 -DPARTICLE=1 -Wundef -DSTART_DFU_FLASHER_SERIAL_SPEED=14400 -DSTART_YMODEM_FLASHER_SERIAL_SPEED=28800 -DSPARK_PLATFORM_NET=ESP32 -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc -DLOG_INCLUDE_SOURCE_INFO=1 -DPARTICLE_USER_MODULE -DUSER_FIRMWARE_IMAGE_SIZE=0x20000 -DUSER_FIRMWARE_IMAGE_LOCATION=0xD4000 -DMODULAR_FIRMWARE=1 -DMODULE_VERSION=6 -DMODULE_FUNCTION=5 -DMODULE_INDEX=1 -DMODULE_DEPENDENCY=4,1,1512 -DMODULE_DEPENDENCY2=0,0,0 -D_GNU_SOURCE -DLOG_MODULE_CATEGORY=""app"" -fno-exceptions -fno-rtti -fcheck-new -std=gnu++14 -c -o ../build/target/user/platform-12-msrc/display4.o src/display4.cpp
src/display4.ino:8:33: fatal error: Grove_4Digit_Display: No such file or directory
compilation terminated.
../build/module.mk:274: recipe for target '../build/target/user/platform-12-msrc/display4.o' failed
make[2]: *** [../build/target/user/platform-12-msrc/display4.o] Error 1
make[2]: Leaving directory '/firmware/user'
../../../build/recurse.mk:11: recipe for target 'user' failed
make[1]: *** [user] Error 2
make[1]: Leaving directory '/firmware/modules/argon/user-part'
../build/recurse.mk:11: recipe for target 'modules/argon/user-part' failed
make: *** [modules/argon/user-part] Error 2
It should be:
#include "Grove_4Digit_Display.h"
It’s currently missing the .h
part.
2 Likes
Well, that was embarrassing. Thanks, I’ve got a skeleton working in Google Colab.
2 Likes
We’ve all been there and we’ll all be back there.
2 Likes
Thanks. For what it’s worth, I’m pleased with how these notebook are turning out. I realize that notebooks don’t hold a candle to the Particle IDE, but it is one way to structure a document for teaching and exposition. It works surprising well.
https://jckantor.github.io/cbe-virtual-laboratory/
1 Like
system
Closed
April 26, 2021, 10:55am
10
This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.