{"id":34024427,"url":"https://github.com/conservationtechlab/dencam","last_synced_at":"2026-03-10T11:31:51.308Z","repository":{"id":43827724,"uuid":"235909725","full_name":"conservationtechlab/dencam","owner":"conservationtechlab","description":"Polar bear maternal den observation system.","archived":false,"fork":false,"pushed_at":"2025-05-09T23:25:57.000Z","size":588,"stargazers_count":5,"open_issues_count":41,"forks_count":2,"subscribers_count":8,"default_branch":"master","last_synced_at":"2026-01-14T10:17:35.896Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/conservationtechlab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-23T23:54:16.000Z","updated_at":"2025-02-24T09:57:08.000Z","dependencies_parsed_at":"2024-10-24T23:12:35.548Z","dependency_job_id":"825cc7f6-2520-4448-af2e-90d06e530080","html_url":"https://github.com/conservationtechlab/dencam","commit_stats":null,"previous_names":["icr-ctl/dencam"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/conservationtechlab/dencam","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conservationtechlab%2Fdencam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conservationtechlab%2Fdencam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conservationtechlab%2Fdencam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conservationtechlab%2Fdencam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/conservationtechlab","download_url":"https://codeload.github.com/conservationtechlab/dencam/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conservationtechlab%2Fdencam/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30332283,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T05:25:20.737Z","status":"ssl_error","status_checked_at":"2026-03-10T05:25:17.430Z","response_time":106,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-12-13T16:18:59.788Z","updated_at":"2026-03-10T11:31:51.294Z","avatar_url":"https://github.com/conservationtechlab.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Overview\n\nThis repository contains control code for Mini DenCam, a polar bear\nmaternal den observation device. The project is a collaboration\nbetween the Conservation Technology Lab at the San Diego Zoo Wildlife\nAlliance and Polar Bears International.\n\n# Hardware\n\nThe target hardware is a Raspberry Pi 4 Model B single board computer\nwith a Picamera-style camera and the AdaFruit PiTFT screen (2.8\"\nresistive touch model with 4 GPIO-connected buttons) attached.\nTypically, several storage devices are connected via the USB\nports on the Pi (e.g. microSD card readers).\n\nThis hardware is typically integrated into a larger assembly that\nincludes a weatherproof enclosure, batteries, solar charge controller,\nand external solar panels. Documentation of the full mechanical and\nelectrical design and construction of the DenCam system is not\nincluded here but it is hoped that this code (which only needs the\ncomponents explicitly mentioned in the preceding paragraph) can still\nbe useful to others who are pursuing related projects or want to\ncontribute to the DenCam project.\n\n# Operating System\n\nCurrently, DenCam runs on Raspian Stretch and Buster. Problems have\nbeen encountered with Bullseye (specifically with interfacing with the\npicamera). Buster must be 32 bit and not 64 bit otherwise there is an issue\nwith the libmmal.so library\n\n# Installation\n## Fenrir\n\n## Install from PyPI\n\n    pip3 install dencam\n\n## Install from GitHub repository\n\n## Install virtualenvwrapper\n\n    sudo pip3 install virtualenv virtualenvwrapper\n\n## Setup virtual environment ~/.bashrc file\n\n```sh\necho -e \"\\n# Virtual environment setup\" \u003e\u003e ~/.bashrc\necho \"export WORKON_HOME=$HOME/.virtualenvs\" \u003e\u003e ~/.bashrc\necho \"export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3\" \u003e\u003e ~/.bashrc\necho \"source /usr/local/bin/virtualenvwrapper.sh\" \u003e\u003e ~/.bashrc\nsource ~/.bashrc\n```\n\n## Create virtual environment for dencam project\n\n    mkvirtualenv dencam_env\n\nNote that DenCam requires Python 3 so if the default on your system is\nPython 2 (it is if you are using Buster OS), make sure the virtual environment will use Python 3:\n\n    mkvirtualenv dencam_env -p python3\n\n## Activate virtual environment (not necessary if you just made it)\n\n    workon dencam_env\n\n## Clone the dencam repository\n\n    git clone https://github.com/icr-ctl/dencam.git\n\n## Update apt package sources list\n\n    sudo apt update\n\n## Install dencam dependencies\n\n    cd dencam\n    python setup.py install\n\n## Install dencam dependencies with optional dependencies\n\nAny functionality that is not integrated into the core dencam project requires\noptional dependencies to be installed. At the moment, there are two tools that\nhaven't been integrated: `utilities/examine_focus_w_grid_scipy.py` and\n`utilities/examine_focus_w_grid.py`. In order to run either of the files, you\nmust first install the dencam dependencies with optional dependencies.\n\n    cd dencam\n    pip install .[all]\n\n## Execute install.sh\n\nCheck if your screen is resistive touch or capacitive touch: If you're unsure,\nlook on the backside of the screen, there will be two dotted off areas, one\nlabeled resistive, one labeled capacitive. If the capacitors are connected and the\nresistors are not, it is capacitive and you will need to adjust the respective command\nwithin install.sh. If the resistors are connected and the capacitors are not, it is \nresistive and you can keep install.sh how it is. If switching from resistive to capacitive,\nyou'll change the --display28r command to --display=28c instead. The fbcp parameter\nindicates that the screen will mirror onto a monitor if connected via hdmi, which\nis preferrable for debugging but feel free to change that as well if you do not\nneed hdmi mirroring. For more information about the screen setup see [here.](https://learn.adafruit.com/adafruit-2-8-pitft-capacitive-touch/easy-install-2)\n\n    sudo chmod u+x install.sh\n    ./install.sh\n\nThe above terminal commands give execution permission to the current user\nand then executes the `install.sh` script. When the script asks if you'd like\nto reboot, enter \u003ckbd\u003eY\u003c/kbd\u003e for yes. Rebooting is necessary for the\nsettings to take effect. Note: this script should only be run once. The\nscript will do the following:\n\n* Disable screen saver\n* Setup PiTFT screen\n\n## Lesehest\nEnsure you have Bookworm 64-bit and are sshed into the pi from your computer.\n\n## Install environment libraries\n\n    sudo apt install python3-virtualenv python3-virtualenvwrapper\n\n## Set up environment activation\n\n    echo -e \"\\n# Virtual environment setup\" \u003e\u003e ~/.bashrc \n    echo \"export WORKON_HOME=$HOME/.virtualenvs\" \u003e\u003e ~/.bashrc \n    echo \"export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3\" \u003e\u003e ~/.bashrc \n    echo \"source /usr/share/virtualenvwrapper/virtualenvwrapper.sh\" \u003e\u003e ~/.bashrc \n    source ~/.bashrc \n\n## Create environment\n\n    mkvirtualenv dencam -p python3 --system-site-packages \n    workon dencam\n\n## Disable screen blanking/screensaver\n\n    sudo tee -a /etc/xdg/lxsession/LXDE-pi/autostart \u003e /dev/null \u003c\u003c EOF\n    @xset s off\n    @xset -dpms\n    @xset s noblank\n    EOF\n\n## Install screen tools\n\n    cd ~ \n    sudo apt-get update \n    sudo apt-get install -y git python3-pip \n    pip3 install --upgrade adafruit-python-shell click \n    git clone https://github.com/adafruit/Raspberry-Pi-Installer-Scripts.git \n    cd Raspberry-Pi-Installer-Scripts\n\n## Configure Screen\n\n    sudo -E env PATH=$PATH python3 adafruit-pitft.py --display=28r --rotation=270 --install-type=mirror \n\nYou will be prompted to reboot after this step, say yes and wait for the device to turn back on. You will see the desktop on the PiTFT screen now.\n\n## Disable taskbar\n\n    nano ~/.config/lxpanel/LXDE-pi/panels/panel\n\nIn the global configs, line 14 sets 'autohide=0' set it to autohide=1 instead. Cntrl + X, Y, enter. \n\n    lxpanelctl restart\n\nThe taskbar on the screen should now be hidden.\n\n## Downloading the repo\nIf you would like to download the most stable version, simply run:\n\n    workon dencam\n    git clone https://github.com/conservationtechlab/dencam.git\n\nIf you would like to download the dev repo, where you can make changes and quickly update new changes, first link this pi to your github account by creating an SSH key and sharing it with your github settings, run:\n\n    ssh-keygen -t ed25519 -C \"your_email@example.com\"\n\nPress enter for all the prompts until its finished, then run:\n\n    cat ~/.ssh/id_ed25519.pub \n\nCopy the entire output and paste it into 'SSH and GPG keys\" in your github settings. Label it as the hostname of your pi. Then run:\n\n    git clone git@github.com:conservationtechlab/dencam.git \n\n## Finish installation\n\n    cd dencam\n\n    pip install .\n\n## Usage \nChange the config setting SOLAR_DIR: to reflect the username of the pi you are using. While you are sshed in, always run:\n\n    export DISPLAY=:0\n    workon dencam\n    cd dencam\n    \nTo run lesehest:\n\n    python lesehest.py cfgs/example_config.yaml \n\n## Possible bugs and how to fix\n### Screen is flipped 180* from button imagery to actual buttons\n\n    sudo nano /boot/firmware/config.txt\n\nOn the last line, you will see a value of 'rotation=90' or 'rotation=270'. Depending which one you see, swap it with the other. If it says 'rotation=90' change it to 'rotation=270' and save the file. Cntrl + X, Y, enter. Reboot the pi.\nRerun lesehest and the screen should be in the correct orientation.\n\n### Screen gui has things out of placed, smooshed, blocking, and buttons are in the center of the screen\n\n    nano /home/USER/dencam/dencam/gui.py\n\nChange line 44 from 'self.placement_config = BookwormConfig()' to 'self.placement_config = BusterConfig()' Cntrl + X, Y, enter.\n\n    nano /home/USER/dencam/dencam/recorder_picamera2.py\n\nChange line 23 from (320, 240) to (640, 480)\nChange line 36 from width=320 -\u003e width=640 and line 37 from height=240 -\u003e height=480. Cntrl + X, Y, enter. \n\nRerun lesehest and the pixels should be aligned properly. \n\n# Usage\n\n## On Raspberry Pi \n\nThe core program in the project is `dencam.py` which runs on the\nRaspberry Pi that is controlling the field device. It accepts a YAML\nconfiguration file as a command line argument. There is an example\nconfig file `./cfgs/example_config.yaml`\n\nYou can copy this example file and modify it to your specific purposes\nand thus then run DenCam on a properly set up system (see Setup\nsection above for how to set up system) via:\n\n    Usage:\n        ./dencam.py cfgs/YOUR_CONFIG_FILE.yaml\n\nIf you are connected to the Raspberry Pi via SSH, then first do:\n\n    export DISPLAY=:0\n\n## Enabling Autostart\n\nCreate an autostart directory that will tell the Raspberry Pi to override the global autostart instructions so dencam will run on boot. \n\n    mkdir .config/autostart\n\nIn this directory, create a .desktop file that points to the virutal environemnt, dencam.py, and your config file. \nNote: Filepaths to your virtual environments, dencam.py, and config file may be different than shown below.\n\n    cd .config/autostart\n    echo '[Desktop Entry]' \u003e\u003e dencam.desktop\n    echo 'Type=Application' \u003e\u003e dencam.desktop\n    echo 'Name=DENCAM' \u003e\u003e dencam.desktop\n    echo 'Exec=/home/pi/.virtualenvs/dencam_env/bin/python3.7 /home/pi/dencam/dencam.py /home/dencam/cfgs/example_config.yaml' \u003e\u003e dencam.desktop\n\nTo test: \n\n    reboot\n\n## Explanation of parameters in the configuration file\n\nThe configuration file stores variables used throughout the dencam \ncode.\n\n### RECORD_LENGTH\n\nTakes a positive integer value of the length each recording will be\n(in seconds). Passing a value of 300 will make each recording 5 min.\n\n### STORAGE_LIMIT\nTakes in a positive float value which will be the minimum amount of storage\n(in gigabytes) necessary in order to start a recording.\n\n### DISPLAY_RESOLUTION\n\nTakes two integer values, used to set the resolution of the display \npages of the Dencam.\n\n### PAUSE_BEFORE_RECORD\n\nTakes in a positive integer value which will be the seconds to wait\nafter the dencam has initially started until the first recording begins\n\n### POWER_OFF_DELAY\n\nControls the amount of time the off button needs to be held down for, until \nthe Pi shuts down.\n\n### CAMERA_RESOLUTION\n\nTakes in two positive integers that will be used to dictate the resolution\nof the camera.\n\n### VIDEO_QUALITY\n\nTakes in a positive integer in the range of 10 to 40 where 10 is extremely\nhigh quality, and 40 is extremely low. The recommended value should be in the\nrange of 20 to 25. \n\n### FRAME_RATE\n\nControls the frame rate of the recordings, taking in a positive integer in the\nrange of 1 to 60. The higher the number, the smoother the recording at the\nexpense of quality. We found through testing that 30 is a decent halfway\npoint between a smooth recording and an unnoticeable change in quality.\n\n### CAMERA_ROTATION\n\nControls the rotation of the camera display by taking in a positive integer,\nwhich represents the orientation in degrees. To have the camera display in\nlandscape, set the value to 0 or 180.\n\n## Using the DenCam user interface\n\nThe DenCam user interface is through the PiTFT screen. It does not\nuse the touchscreen functionality of the screen: the screen itself is\nonly used for display and the top two physical buttons beside the\nscreen are used for control. DenCam will start on the OffPage, which\nis in the middle of our traversal. DenCam will boot into the OffPage\nautomatically for power saving purposes. The top button will advance the\ndisplay through a series of status pages:\n\n* Networking Information Page\n* Recording Status Page\n* Solar Display Page\n* Camera Preview Page\n* Blank page with screen illumination disabled\n\nOn the Recording Status Page, the second button will toggle recording\non and off (recording will begin automatically after the countdown set\nin the configuration file without needing to use this control).\n\nOn the Camera Preview Page, the same second button will toggle between\nthe full resolution camera view and a one-to-one pixel view intended\nto aid in focusing the camera (the camera is focused manually).\n\nOn the Network page, the second button will toggle on/off airplane mode.\nNote that airplane mode will be enabled or disabled on boot depending on\nthe variable AIRPLANE_MODE in the config file.\n\nOn the Solar page, the second button will allow user to manually log info.\nThis will also update the information being displayed on the page as well.\n\n## SunSaver device setup\n\nThe SunSaver device is able to connect to any usb port on the rasberry pi,\nprior to the dencam being booted that is. After which it is not advised to\ndisconnect while dencam is running. The SunSaver is able to be turned on\nand off while dencam is running, the SolarPage will display errors when\nSunSaver may be off or there is an error with the usb connection.\n\n\n## Setting up cronjobs\n\nDencam uses a few cronjobs for varying purposes. To set up the cronjob \nfor rebooting the dencam every day at 1am use:\n\n    $ sudo nano /etc/crontab\n\n    @reboot         root    hwclock --hctosys --utc\n    30 *    * * *   root    hwclock --hctosys --utc\n    0  1    * * *   root    /sbin/shutdown -r now\n\nThe cronjob that logs SunSaver data every hour uses:\n\n    0 * * * * /home/pi/.virtualenvs/dencam/bin/python3 /home/pi/dencam/dencam/sunsaver_log.py /home/pi/dencam/cfgs/example_config.yaml\n     \nwhere 'pi' can be interchanged with the active username on the Pi.\nIf there is a need to adjust logging intervals the format of the cronjob timing \nwill be:\n\n    *(min) *(hour) *(day) *(mnth) *(weekday) [fullpath to python] [fullpath to script] \n\nAttached is a website to help configure the run time for cronjobs\nhttps://crontab.guru\n    \n## Setting up DenCam to run on boot\n\nTODO\n\n## Setting up RTC\nFor RPi's not connected to the internet a suitable battery powered hardware\nclock will be required.\n\nInstall clock overhanging the board farthest away from the USB plugs.Follow\ndirections on the website exactly.\n\nAdafruit RTC 1st Steps \nhttps://learn.adafruit.com/adding-a-real-time-clock-to-raspberry-pi/set-up-and-test-i2c\n\nAdafruit RTC 2nd Steps\nhttps://learn.adafruit.com/adding-a-real-time-clock-to-raspberry-pi/set-rtc-time\n\n\n\nEnter the following\n\n    sudo i2cdetect -y 1\n\nBe sure you see the device 68 show up in the matrix as seen below. If not,\ndouble check your connections.\n\n    $   0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f\n    00:          -- -- -- -- -- -- -- -- -- -- -- -- -- \n    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- \n    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- \n    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- \n    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- \n    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- \n    60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- \n    70: -- -- -- -- -- -- -- --\n    \nAfter the hardware checks out add support for the RTC by adding a device\ntree overlay. Run\n\n    sudo nano /boot/config.txt\n\nto the end of the file add\n\n    dtoverlay=i2c-rtc,ds3231\n \nControl x, and Y to save the file. Run the following to reboot\n\n    sudo reboot\n    \nLog in and run the following to see if the UU shows up where 0x68 should be\n\n    sudo i2cdetect -y 1\n\nUU should show as it does in the matrix below\n\n    $   0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f\n    00:          -- -- -- -- -- -- -- -- -- -- -- -- -- \n    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- \n    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- \n    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- \n    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- \n    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- \n    60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- \n    70: -- -- -- -- -- -- -- --\n    \nDisable the \"fake hwclock\" which interferes with the 'real' hwclock by\nentering the following\n\n    sudo apt-get -y remove fake-hwclock\n    sudo update-rc.d -f fake-hwclock remove\n    sudo systemctl disable fake-hwclock\n    \nNow with the fake-hwclock off, you can start the original 'hardware clock'\nscript\n\nRun the following\n\n    sudo nano /lib/udev/hwclock-set\n\ncomment out these lines:\n\n    #if[-e/run/systemmd/system];then\n    #exit 0\n    #fi\n    #/sbin/hwclock --rtc=$dev --systz --badyear\n    #/sbin/hwclock --rtc=$dev --systz\n\nRun \n\n    date\n\nto verify the time is correct. If not, double check your internet connection\nand reboot to allow the NTP to pull the correct date and time from the \ninternet.\n\nWhen date reads correctly run\n\n    sudo hwclock -w\n    sudo hwclock -r\n    sudo reboot\n\n# Dencam Pages\n\nThe Dencam user interface has 5 pages, which are traversed using the \ntop button. Each page is displaying information designated to itself.\n(i.e. Solar Display Page displays information received from Sun Saver)\n\n## Networking Information Page\n\nThis page displays the hostname of the device along with wifi network\ninformation.\n\n## Recording Status Page\n\nThis page displays the current number of video recordings that have been\nsaved and stored, the file directory where the recordings are currently\nbeing written to, the amount of available storage, the timestamp, and a\ncountdown for the recording to start (which is only used for the initial\ndencam boot). When the countdown is complete, the countdown text will be\nreplaced with the recording status text. The second button is used to\ntoggle the recording on this page.\n\n## Solar Display Page\n\nThis page displays the latest log in the solar csv file, which can be updated \nusing the function button.\nCurrently it displays the date and time, Battery Voltage(V), Array Voltage(V),\nCharge current(A), Load current(A), Ah charge(Daily)(Ah), Ah load(Daily)(Ah), \nthe sunsaver alarm, and an error status.\n\nSunsaver alarm uses the built in alarm messages used by the sunsaver.\n\nError status displays an errror usually when there is no usb connection detected\nor the sunsaver may be off.\n\n## Camera Preview Page\n\nThis page displays the timestamp and current feed of the Camera. Note that\nthis feed is not necessarily being recorded. The second button will toggle\nthe one-to-one pixel tool to aid focusing.\n\n## Blank page with screen illumination disabled\n\nThis page is a blank page that displays no information. Its sole purpose\nis for power saving.\n\n# Focus Score Tool\n\n## Purpose\n\nThe purpose of a focus score tool is to help the user easily focus the\ncamera. In order to do so, this tool displays a grid over the camera feed\nwith values in each section of the grid that denote how in focus the camera\nis for that given section. Generally, a higher value for a given section\nindicates that the section is more in focus, while a lower value indicates\nthat the section is more out of focus. In order for the camera to be in\nfocus, you need to manually adjust the lens and see how the values react.\nThe goal is to have the object or landscape that you're focusing on have the\nhighest value(s) possible.\n\n## Usage\nThere are two focus score tools which are each implemented differently.\n`utilities/examine_focus_w_grid.py` is an OpenCV-based implementation, while\n`utilities/examine_focus_w_grid_scipy.py` is a SciPy-based implementation.\nAt the moment, the OpenCV-based implementation runs the best out of the two\nversions.\n\n### Execute focus score tool\n\nIn order to execute the focus score tool, make sure to follow the steps\nbelow in order.\n\n1. SSH into the Raspberry Pi\n2. cd into the root directory of the dencam repository\\\n   i.e. `cd dencam`\n3. Activate the virtual environment\\\n   i.e. `workon dencam_env`\n4. Install dencam dependencies with optional dependencies\\\n   i.e. `pip install .[all]`\n5. Execute the focus score tool\\\n   i.e. `python utilities/examine_focus_w_grid.py` or\\\n   `python utilities/examine_focus_w_grid_scipy.py`\n\n### Terminate focus score tool\n\nIn order to terminate the focus score tool, press\n\u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eC\u003c/kbd\u003e twice. If the program hasn't closed on the\nPi, then perform one of the following actions:\n\n- Tap the PiTFT touchscreen on the Raspberry Pi\n- Shake the mouse connected to the Raspberry Pi\n- Press any key on the keyboard connected to the Raspberry Pi\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconservationtechlab%2Fdencam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fconservationtechlab%2Fdencam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconservationtechlab%2Fdencam/lists"}