Neopo: A lightweight solution for local Particle development

Thank you for this tremendous work, Nathan. I was looking for something to help me automate builds with my gitlab CI/CD. I have not plumbed it out all the way yet, but I did some testing with the docker image and it looks like this will make it work.

4 Likes

I would be happy to help out with testing and documentation of the installation. However, I cannot figure out from what is published, how to install it for Windows. I already have Python and Git installed (I use them).

Here is where I get stuck:

$ python3 -m pip install .
$ neopo install

“python3 -m pip install .” should reference a neopo installation in some way, but it doesn’t.

Hey @markwkiehl, sorry for the confusion.

You need to run the pip install command from within the cloned neopo repository.

The following should work in your case:

git clone https://github.com/nrobinson2000/neopo
cd neopo
python3 -m pip install .
neopo install

Raspberry Pi manifest.json bug is back

Hi Nathan. I’ve been using neopo and it has helped tremendously with productivity. I hope you are still working the project.

I experienced the “manifest.json bug” of 2021 and it seems to have returned on the RPi. It throws the missing manifest error on installation and thereafter cannot download the executables.

I have tried it on 2 x86 Ubuntu boxes and it installs fine, so it seems to be specific to RPi.

These are RPi4 with the latest (last week’s) full “Raspberry Pi OS with desktop and common applications” installed.

I have tried with Particle pre-installed, and without, with same results. A typical log is pasted below.

Any help you can provide will be most welcome.

Thanks,
Bill

pi@raspberrypi:~ $ particle version
3.7.0
pi@raspberrypi:~ $ which neopo
pi@raspberrypi:~ $ bash <(curl -sL neopo.xyz/install)
Installing Linux dependencies...
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
dfu-util is already the newest version (0.9-1).
git is already the newest version (1:2.30.2-1).
jq is already the newest version (1.6-2.1).
libarchive-zip-perl is already the newest version (1.68-1).
libfl-dev is already the newest version (2.6.4-8).
libisl15 is already the newest version (0.18-4).
libncurses5 is already the newest version (6.2+20201114-2).
libudev-dev is already the newest version (247.3-7+rpi1+deb11u1).
libusb-1.0-0-dev is already the newest version (2:1.0.24-3).
python3 is already the newest version (3.9.2-3).
python3-setuptools is already the newest version (52.0.0-4).
vim is already the newest version (2:8.2.2434-3+deb11u1).
python3-pip is already the newest version (20.3.4-4+rpt1+deb11u1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Cloning into '/tmp/tmp.fstOq0UvT6/neopo'...
remote: Enumerating objects: 1785, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 1785 (delta 4), reused 7 (delta 4), pack-reused 1768
Receiving objects: 100% (1785/1785), 3.32 MiB | 1.41 MiB/s, done.
Resolving deltas: 100% (1040/1040), done.
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Processing /tmp/tmp.fstOq0UvT6/neopo
Building wheels for collected packages: neopo
  Building wheel for neopo (setup.py) ... done
  Created wheel for neopo: filename=neopo-361-py3-none-any.whl size=39744 sha256=8c3ea1e73b4437c0ea1ec6d3516de547d54787d657d8a4a6178ee2e7b2716c12
  Stored in directory: /tmp/pip-ephem-wheel-cache-0tb3r9ty/wheels/38/70/a2/beb426c12a78cb4bd87e76038794153f054ca7845f71c7dde2
Successfully built neopo
Installing collected packages: neopo
Successfully installed neopo-361
Installing neopo...
Finding Workbench extension URL...
Downloading Workbench extension...
Failed to download particle executable from extension!
Error: file /home/pi/.neopo/cache/manifest.json not found.
Please ensure that you have installed the dependencies:
	$ neopo install
pi@raspberrypi:~ $ neopo update .
Updating dependencies...
Finding Workbench extension URL...
Downloading Workbench extension...
Failed to download particle executable from extension!
pi@raspberrypi:~ $ neopo upgrade
This command is deprecated because neopo is now installed using pip or the AUR.
To upgrade neopo, either rerun the universal installer, or follow distribution
specific instructions.

Hey @wawhite3

The root cause of this error is that the Particle Workbench extension no longer ships with a particle binary for ARM. However, it appears that the binary is still available from binaries.particle.io

I’ve released a fix to neopo to correct this error. Please try updating/reinstalling neopo.

1 Like

Thanks Nathan, I will let you know if I have any further troubles.

Hi Nathan, I was having issues installing Particle on my Raspberry Pi when I came across your service which seems sorely needed. Thank you for maintaining this project throughout the years. The issues I was having was when trying to run “particle setup” it would result in the error:
â Now to find your device(s)…TypeError: SerialPort.list is not a function

From what I could tell it seems neopo has the fix to this issue. However, I am now running into the same problems as wawhite3 above. All of the same commands yield the same errors they got. I am running 2 raspberry pi zeros with the current light raspbian OS with the desktop GUI installed and both of them run into the same issues.
“neopo install” returns:
“Downloading Workbench extension…
Failed to download particle executable from extension!”

“neopo particle login” or “neopo login setup” returns:
$Error: file /home/pi/.neopo/cache/manifest.json not found.
$Please ensure that you have installed the dependencies:
$ neopo install

Any help you can give me would be greatly appreciated.
Thanks for your time,
Harry

Hey @carburyharry

Thanks for using neopo!

Two questions:

  • Are you using the latest neopo commit with the fix for the missing Particle executable?
  • Are you using 32-bit or 64-bit Raspberry Pi OS? (Both architectures are supported, but aarch64 requires some additional post-install setup.)

I would recommend trying to manually install neopo:

git clone https://github.com/nrobinson2000/neopo
cd neopo
sudo python3 -m pip install .
neopo install

Also, it’s unlikely, but it might be possible that you have multiple (conflicting) installations of neopo. You can check with:

which -a neopo

I rebuilt a fresh armv7h Arch Linux ARM install for Raspberry Pi 4 last night and tested the latest neopo-git, and everything still seems to be working.

I’ve been using Arch Linux ARM on all of my Raspberry Pi’s lately, and it’s far less of a headache than stock Raspberry Pi OS. I’ve made a tool to prepare configured bootable drives for Arch Linux ARM, but it requires an x86_64 host running Arch Linux to run. I’ll publish the tool soon.

Hey @nrobinson2000,
Thanks for getting back to me, to answer your first question, yes I believe I was using the latest neopo commit as I attempted to install using the Universal Installer and install from source methods listed on your website https://neopo.xyz/. The source method required the installation of python 3 beforehand as raspbian lite does not have it.
Secondly, I am using Raspbian OS Lite 32-bit installed using the raspberry pi imager, I’m still very new to this but I didn’t know if the pi zero w could run 64-bit.

So I attempted the methods you gave me, on both Pi’s when I run

which -a neopo

it returns

 /usr/local/bin/neopo

and when manually installing neopo as you outlined above…

carburyharry@raspberrypi:~ $ git clone https://github.com/nrobinson2000/neopo
Cloning into 'neopo'...
remote: Enumerating objects: 1789, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 1789 (delta 7), reused 12 (delta 5), pack-reused 1768
Receiving objects: 100% (1789/1789), 3.32 MiB | 669.00 KiB/s, done.
Resolving deltas: 100% (1043/1043), done.
carburyharry@raspberrypi:~ $ cd neopo
carburyharry@raspberrypi:~/neopo $ ^[[200~sudo python3 -m pip install .~
bash: $'\E[200~sudo': command not found
carburyharry@raspberrypi:~/neopo $ sudo python3 -m pip install .
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Processing /home/carburyharry/neopo
Building wheels for collected packages: neopo
  Building wheel for neopo (setup.py) ... done
  Created wheel for neopo: filename=neopo-362-py3-none-any.whl size=39977 sha256=2b95a17f90a63674077a4a4a70ea36caa19f1fb43bbd0b6d809ffa775c5a2e85
  Stored in directory: /tmp/pip-ephem-wheel-cache-cvhioulm/wheels/c7/03/ff/9dfe1ee4abcd34cac8fd9d533e090da8e7d89629e2b77e87d7
Successfully built neopo
Installing collected packages: neopo
  Attempting uninstall: neopo
    Found existing installation: neopo 362
    Uninstalling neopo-362:
      Successfully uninstalled neopo-362
Successfully installed neopo-362
carburyharry@raspberrypi:~/neopo $ neopo install
Installing neopo...
Finding Workbench extension URL...
Downloading Workbench extension...
Failed to download particle executable from extension!

Same result on both Pi’s.
So unfortunately still no luck, I do also have access to a raspberry pi 3 which I can use for experimenting if you would like me to check if this is a pi zero only issue. As the raspbian os lite comes with very little is it possible I am missing a program or feature which Is essential to neopo? I am willing to try installing Linux on the devices if this would make troubleshooting easier.
Apologies for coming at you with more problems. I really appreciate the help you’re providing.

Hey @carburyharry

I just flashed a USB of Raspberry Pi OS Lite (32-bit) and manually installed neopo on a Pi4. Worked without any hiccups.

Which Raspberry Pi Zero are you using? The older ones may not have sufficient memory to use neopo. I’d recommend trying your Raspberry Pi 3.

Below are the commands to manually setup neopo on Raspberry Pi OS:


Install dependencies

sudo apt install git python3-pip

sudo apt install libarchive-zip-perl libusb-1.0-0-dev dfu-util libudev-dev libisl15 libfl-dev python3 git vim python3-pip python3-setuptools libncurses5 jq

Install neopo:

cd /tmp
git clone https://github.com/nrobinson2000/neopo
cd neopo
export PATH="$HOME/.local/bin:$PATH"
pip install .
neopo install

Setup particle:

export GODE_DEBUG=info
neopo particle usb configure

Create and configure a project:

neopo create test_project
cd test_project
neopo configure photon 3.3.1

Building the project works as expected:

$ neopo build

:::: COMPILING APPLICATION

   text	   data	    bss	    dec	    hex	filename
   3532	    112	   1084	   4728	   1278	/tmp/test_project/target/photon/test_project.elf

*** COMPILED SUCCESSFULLY ***

Hope this helps!

1 Like

Just wanted to say thanks for putting this together. Your docker image has enabled me to add a CI/CD pipeline for my particle projects in GitLab. Really fantastic.

1 Like

I'm trying to install neopo on a newer Mac with Apple silicon. I get this error:

Downloading Workbench extension... Failed to download particle executable from extension!

When I tried the same process on a Linux machine I did not have this problem.

Should it be possible to install neopo on a Mac with Apple silicon?