DIY CCTV – Raspberry Pi IP Cameras and NVR

motionEye

I have an old CCTV DVR with two older analog cameras attached. It was all top of the line security gear 10 years ago when I was active in the field, and it has not aged well. The DVR has a very old and obviously no longer maintained android app, and the desktop software is just the same. I am not even sure if the company still sells standard DVRs anymore. The image quality on the cameras is horrible, somewhere around 480. To top it off my once prized analog security camera died while I was writing this.

Everything is IP and all the recorders are now NVRs these days. I was looking at possible new solutions to upgrading and there are some decent options out there. Theres the Blink XT2 and Arlo Pro cameras, they seem to be the most popular. There are also the super cheap (but indoor only at this time) Wyze cameras. They all have pretty decent apps but they all rely on cloud storage or record to local SD cards. If you want IP cameras without the cloud you are looking at going through a security professional or something you can get from Costco, Home Depot or Amazon etc. Now I can’t afford a new IP camera package at the moment but they seem nice, but with no local storage I decided to see if I could roll my own NVR and IP camera.

Before you go any further you should read this blog article, it has a ton of info on the options you have available to you. He goes in depth about the options, I am going to give you my experience with them, what I ended up sticking with and how I got it setup. I recommend trying out all the options if you are so inclined, it took me about a day or two to bounce between them all and settle on one. I have been writing this article for two weeks now.

I have a home server running on an old slim desktop computer (that someone dumped off on my curb one day). I am running Ubuntu Server 18.04 headless. I have a few programs and services running on it as well as a few terabytes of media that I cannot risk losing. Even losing the OS would be a pain in the ass as my Plex server would have to re-crawl the folders. That takes a long while, an event I would like to avoid if at all possible. So I am always hesitant on installing and trying new things that look like they need a lot of tweaking and trial & error. Enter the Raspberry Pi. This little SBC makes testing things perfect for me (I have still yet to dive into Docker and VMs). If it proves not too problematic then I can toss it on ye ole server.

I started writing this over a weekend, I thought I could turn my experience into a quick write up and oh man did this thing grow. I just want to state up front that I was kinda sideswiped during my process of doing this as a motionEyeOS prerelease came out and the official github has updated a few things which also match what I wrote here now (like they now cover the install on Buster which they did not before). So you may find some redundancies between our pages. Go figure.

View Post

Neopixel Stoplight

3D Printed Neopixel Stoplight

I had been looking for a STL of a stoplight to print for about a year now. I wanted to use the colors of the stoplight to signal to my younger kids when it was ok to wake up in the morning, and when it was time to go back to sleep. My ideal was that I could use Node-Red running on the home server via MQTT to regulate when the stoplight changed colors. Thingiverse’s search is horrible and you could spend days there and not actually get what you are looking for so I never found one that would work. The other day I was searching for some reference STLs of something and accidentally came across a STL for a stoplight. Not one, but three (two remixed from the other).

The first one looked great, good size and decent design. Except it was designed for LEDs and an ATTiny to drive its sequence. The second was a remix of the first. The third was another remix that extended the back casing. The remixes made things easier to print but still relied on LEDs and an ATTiny of sorts. This was a great starting point for me. I have no problems modifying STLs for my purposes. I like to use Tinkercad, not very good with Fusion 360. I downloaded the files and started my own remix. I took elements from all three versions of the stoplight.

I modified the back case to allow a Lolin v3 to be able to mount to it. Then I had to create a cover for the Lolin. I took the front from the original thing, I preferred its one piece to the remixes four piece but I filled in the slot for the little switch. I used the LED panes/covers from the original, unmodified. This was great, I had a front and back a cover, LED panes and the inlay to hold the LEDs. So I printed it all out and went to work. First things first, I tested the LEDs. Like I thought, the LEDs I have are not the super bright ones and running off of the Lolins 3v they just didn’t have enough brightness to shine through very well. No super bright LEDs but I do have some WS2812 neopixels. I hooked one up to test and yes they were perfect. So I modified the LED inlay to hold three neopixels.

I wanted to be able to control the stoplight via MQTT from my server running Node-Red. I used the neopixel example from Adafruit and the default Pubsubclient example for an ESP8266. Mashed the two together and I was able to change the colors on the fly with no problems. I showed off the stoplight to a friend of mine and he loved it. He wanted one for himself, but he doesn’t have a server or anything that runs MQTT. No problem, the Lolin can handle web GUIs. A quick google for a web server on an ESP turned up a nice little tutorial on how to turn on and off GPIO pins from a web GUI. BAM! I took that code and mashed it up with the neopixel code I already had an I was able to get a nice little web page displayed to change the colors of the stoplight. This is awesome.

View Post

Wanhao i3 32bit upgrade

Maker Select 32Bit Upgrade

I decided to make the jump to 32bit printing. I upgraded from a stock Melzi on a Monoprice Maker Select v2.1 (a rebranded Wanhao i3, Cocoon Create). I had no real reason to other than I wanted something to do and I figured this would be a good project, and as always I’m looking for better prints. So why not? I got a BIGTREETECH SKR 1.3 and five (5) TMC2208 v3.0 UART ready steppers. I pulled the trigger and went all in head first after a single night of research. To be honest though when I started this journey there was not a lot of info for doing this just yet, the SKR was still pretty new. What info I have found came mostly from some facebook groups (BIGTREETECH) I am in and a few YouTube videos. But as I type this there is now tons of info available, just most of seems to be directed towards the Ender printers, yay.

 

Things to note up front:

This guide is a long one, I would read this all the way through first it’ll save you a headache. From what I read the TMC2208s don’t support Linear Advance while in stealthchop. It must be disabled and used as spreadcycle over UART instead if you want Linear Advance. The other option is to use a different driver than a 2208 for the extruder. This would get around the Linear Advance issue. It may also be fixed in Marlin further down the line, who knows.

Getting everything setup including the new programming environment was a pain in the ass, hopefully this “guide” will alleviate some of the pain.

I recommend that you DO NOT buy the TFT35 or any TFT (except maybe the new dual mode TFTs). The dual screens can switch between TFT mode and 12864 LCD mode. The TFTs do not have all the functionality of a regular LCD screen. I ordered the TFT35 at first and after two days I sent it back and got a LCD12864 Graphical display instead. Thats the route I am gonna go. The stock screen on a Wanhao i3 is not compatible with the SKR as far as I have been able to find, unless you rewire the plug. The TFT35 was $32 and the LCD12864 was only $12. Heres a good video showing the TFT35.

View Post

OctoPrint-TFT on a Raspberry Pi

octoprint-tft

So I have been seeing the new kid on the block pop up a lot recently, no not that shitty fucking band. This is a new “plugin” for the famous and awesome OctoPrint, OctoPi actually – OctoPrint-TFT. I have seen the screenshots and it is looking slick I must say. A while back I tried to use the OctoPrint TouchUI plugin and didn’t have much luck with it, in the end as the Pi I had at the time was a lower model and I just found the responsiveness just too slow. Plus this gives it a nice TFT feel like it was stock and meant to be. Le’s try it. I am gonna use the same waveshare 3.5″ LCD screen I had before but this time a newer Raspberry Pi 3B+. So I wont need a WiFi dongle this time either cause its built-in.

 

Parts used

  • Raspberry Pi 3 B+
  • Waveshare 3.5″ LCD TFT screen
  • A micro SD card of course
  • Power supply and cord for the Pi
  • USB cable to connect the Pi to the printer
  • A 3D printer lol
  • A computer with some sort of SSH program or a screen and keyboard/mouse to work directly off the Pi (might work I am not sure, I used a terminal on my mac and SSH’d into the Pi).

 

Let’s Party

Let’s follow the directions from the Github page and see what happens?

After installing a fresh copy of OctoPi v0.16 I started the Github directions.

 

The file is actually “/etc/octoprint-tft-environment” not the location.

sudo nano /etc/octoprint-tft-environment
(this tidbit copied form the github page)

The basic configuration is handled via environment variables, if you are using the .deb package you can configure it at /etc/octoprint-tft-environment.

  • OCTOPRINT_CONFIG_FILE – Location of the OctoPrint’s config.yaml file. If empty the file will be searched at the pi home folder or the current user. Only used for locally installed OctoPrint servers.
  • OCTOPRINT_HOST – OctoPrint HTTP address, example http://localhost:5000, if OctoPrint is locally installed will be read from the config file.
  • OCTOPRINT_APIKEY – OctoPrint-TFT expects an API key to be supplied. This API key can be either the globally configured one or a user specific one if “Access Control”. if OctoPrint is locally installed will be read from the config file.
  • OCTOPRINT_TFT_STYLE_PATH – Several themes are supported, and style configurations can be done through CSS. This variable defines the location of the application theme.
  • OCTOPRINT_TFT_RESOLUTION – Resolution of the application, should be configured to the resolution of your screen, for example 800x480. By default 480x320.

So go to the browser on your working machine that you use and go to the Pies IP address and go thru the OctoPrint setup fun. Once done grab an API key from the config menu on OctoPrint and lets edit that config file for the OctoPrint-TFT.

Do a find -name "config.yaml" on your Pi and you will find the location of yours. Add that to the config. Host should be http://localhost . The API you grabbed from the config menu slap that where it needs to go. I left the last two alone.

It has come a long way since the last time I tried to get this screen to work. This time its is really freaking easy!

This should install with the screen to boot with the bottom being the power plug, if you want it the other way do this instead

Reboot your Raspberry Pi and make sure you get video on your LCD.

If your screen is not rotated correctly with the above command still, do the following.

And change the line for your display to add :rotate=270 as shown below

The Pi rebooted after downloading some files and holy shit! The screen is working, well it showed the boot up sequence and a login prompt. Let’s get touch working and the desktop.

sudo reboot

Let’s see?

Boot up sequence and…login prompt. Ugh. sudo raspi-config to desktop? That loads and wants lightdm, so no. TFT wants xserver, so its gonna get xserver. Lets Google and I mead Reddit. Google didn’t have shit, too new still. Found it.

Let’s try this.

He has an extras step after installing OctoPrint-TFT.

Lastly we need to remove the 99-fbturbo.conf file from our Xorg directory he says.

Now on reboot OctoPrint-TFT should load and start attempting to connect says he?

Fucken eh right it did! If you see the Octoprint image but the error says

Unexpected error: Get /api/connection: unsupported protocol scheme

As mentioned earlier I found out on the Github issues page it was mentioned there to add “http://” to the config file instead of just localhost. So make sure you did that.

If you see the “Connecting to OctoPrint” and it never goes away, don’t wait too long! It simply means it has no connection to a 3D printer at that moment. You MUST plug it in for the TFT to do its job and actually work. Incredibly confusing I know. Hopefully they’ll fix that soon, and change the message soon.

After playing with it for a few minutes (no actual printing done) I find it pretty neat, and may possibly use it in the future if my LCD screen ever loses functionality for some reason. I could disable the control boxes screen lets say and enable more features in Marlin, after I did upgrade my firmware. But I am not too sure. Requiring the tethered connection to the Pi is a drawback for me, thats way more plugs sticking out of a screen than I would like. If I had the 7″ screen to hide the goop maybe, but this wasn’t designed for those. It was perfect size on the 480×320 I ave.

Or if I do some crazy new board installed over the Melzi and I don’t have a screen. I could use this. I wanted to try Klipper out and that loses the screen but I don’t think there is support for it just yet. I am not willing to try it out at this point in time.

But that was my trick to get OctoPrint-TFT to work on my Waveshare 3.5″ TFT screen and Raspberry Pi 3 B+. Hope it helps.

 

The perfect Raspberry Pi enclosure

The perfect Raspberry Pi enclosure

There are many and I mean many Raspberry Pi cases out there. Fucking tons. There are a few great ones and a lot of mediocre ones. I came across a pretty good one. It is a great case and not just because it looks cool. It’s actually function-able. The case is designed to fit a VESA monitor mount. So if you have a TV or monitor on a stand you could bolt this to the rear and bam!. The holes are also great for general purpose mounting. The case is designed slightly different than all the others out there. There is NO CUTOUT for the micro USB power plug. We don’t use it here. This case has room for a DC-DC buck converter. Available on Amazon, eBay and all over. Standard part.

We take a nice big fat power source like 12v DC 3A and knock it down to 5.1v DC for the Pi. Then we wire that output directly to the Pies GPIO pins for 5v and GND. This works great, a nice fat stable power source. And the bricks are far easier to get a hold of then a 3A 5v USB plug. I have tons of them lying around.

DC-DC Buck Converter

 

We take the barrel plug and solder in a diode to the source side of the DC-DC buck converter. We take the output and apply that to the power GPIO pins for 5v and GND. Then we take a LED and wire in a 330ohm resistor and connect that to GND and GPIO 14 (UART TXD). Heres the trick to get the GPIO pin to follow the Pies power up and power down cycle. So the LED will turn off when the Pi is safe to unplug.

Edit your /boot/config.txt file and add the following line:

enable_uart=1

Thats it, now the LED will light when powered on and it will shutoff when it is safe to unplug the Pi. If you wish to use a different pin other than 14 you can follow this guide over here.

The case

Heres the thingy for my modified version of the case. The original calls for brass inserts for the screws, which is awesome I just don’t use them. So I remixed the files to use standard M3 screws. No more brass inserts. I also increased the depth of the lid. My jumper wires were hitting the top of the  lid and preventing me from closing it. No I have plenty of room fire wires and jumpers.

My Remixed Case

https://www.thingiverse.com/thing:2956874

Original Version

https://www.thingiverse.com/thing:2286741