Skip to content

Instantly share code, notes, and snippets.

View nickovs's full-sized avatar

Nicko van Someren nickovs

  • Absolute Software
  • Boulder, CO, USA
View GitHub Profile
@nickovs
nickovs / pico_touch.py
Created February 26, 2024 14:21
RP2040 / Pi Pico touch interface using just one resistor
# Simple Pi Pico/RP2040 touch interface
# This implements a capacitive touch interface using two GPIO pins and just one external resistor.
# It work by using the user's body as a capacitor to ground; the output GPIO pin goes through the
# resistor to the touch point, which is connected directly to the input GPIO pin. A PIO program
# periodically toggels the output pin and then counts the number of cycles until the input pin
# changes level. The time constant for the response is proportional to both the fixed resistor
# value and the capacitance at the touch point, which varies depending on if the user is touching
# or not. With the default setting a 2.2 megaohm resistor works well.
@nickovs
nickovs / get_public_ip.py
Created January 17, 2024 18:35
A tool for fetching your current public IPv4 address
#!/usr/bin/env python3
from random import shuffle
from sys import exit, stderr
from urllib.request import urlopen
from urllib.error import URLError
urls = [
"ifconfig.me",
@nickovs
nickovs / make_git_layer.sh
Created March 13, 2023 16:41
A script to build an AWS Lambda overlay layer that installs `git` and all its dependencies.
#!/bin/bash
# Build an AWS Lambda zip file containing git and its dependencies
cat <<\EOF > tmp_build.sh
#!/bin/bash
# Comment this out if you want to see all the actions.
quiet=-q
# List of main executables from /usr/bin to copy into layer
@nickovs
nickovs / badger_orion.py
Created May 28, 2022 19:30
A simple script for receiving water meter readings from a Badger ORION water meter using an Software Defined Radio (SDR).
#!/usr/bin/env python3
# A simply tool for receiving water meter readings from a Badger ORION water meter.
# Device radio details can be found at https://fccid.io/GIF2006B
# Requires rtl_433 to be installed. See https://github.com/merbanan/rtl_433
import sys
import json
import subprocess
@nickovs
nickovs / docker-remount.sh
Created April 17, 2022 16:51
A script to mount a host directory into a running Docker container
#!/bin/bash
# A script for mounting a host directory into a running Docker container
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <container> <host path> <target path>"
exit 1
fi
CONTAINER=$1
@nickovs
nickovs / zbar_lambda_build.sh
Last active December 27, 2023 19:02
A script for building a version of the Zbar library suitable for running in an AWS Lambda instance
#!/bin/bash
# Clear out old images
[ -d "lib" ] && rm -r lib
cat <<EOF > tmp_recipe.sh
# This is the actual container-side recipe
yum groupinstall -y "Development Tools"
cd /root
@nickovs
nickovs / curve25519.py
Created June 29, 2021 20:39
A pure Python implementation of Curve25519
"""A pure Python implementation of Curve25519
This module supports both a low-level interface through curve25519(base_point, secret)
and curve25519_base(secret) that take 32-byte blocks of data as inputs and a higher
level interface using the X25519PrivateKey and X25519PublicKey classes that are
compatible with the classes in cryptography.hazmat.primitives.asymmetric.x25519 with
the same names.
"""
# By Nicko van Someren, 2021. This code is released into the public domain.
@nickovs
nickovs / stepper.py
Last active November 14, 2023 22:07
A stepper motor driver for MicroPython
# stepper.py
# A micropython driver for 4-phase, unipolar stepper motors such as
# the 28BYJ-48
# Relesed to the Public Domain by Nicko van Someren, 2020
# The constructor for the Stepper class takes as arguments the four
# pins for driving the motor phases, in phase order, and optionally a
# timer. The pins can be passed as pin numbers or machine.Pin objects
@nickovs
nickovs / Hypercircumsphere.ipynb
Last active February 18, 2021 15:47
Compute the N-dimentional (hyper-)circumsphere
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.