<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.7west.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Animationb</id>
	<title>7West Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.7west.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Animationb"/>
	<link rel="alternate" type="text/html" href="https://wiki.7west.org/index.php/Special:Contributions/Animationb"/>
	<updated>2026-05-06T07:45:06Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.7west.org/index.php?title=Main_Page&amp;diff=8</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.7west.org/index.php?title=Main_Page&amp;diff=8"/>
		<updated>2025-09-10T02:08:16Z</updated>

		<summary type="html">&lt;p&gt;Animationb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A wiki for 7West to keep track of projects and other important information:&lt;br /&gt;
&lt;br /&gt;
===Projects:===&lt;br /&gt;
&lt;br /&gt;
* [[Project Quartz]]&lt;br /&gt;
&lt;br /&gt;
* [[Project Marathon]]&lt;br /&gt;
&lt;br /&gt;
* [[Offline Wikipedia]]&lt;br /&gt;
&lt;br /&gt;
===Microcontroller/SBC Guides===&lt;br /&gt;
&lt;br /&gt;
* [[ATMega328P]]&lt;br /&gt;
&lt;br /&gt;
* [[Raspberry Pi]]&lt;br /&gt;
&lt;br /&gt;
==== Keeping this as I set up the site ====&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User&#039;s Guide]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Animationb</name></author>
	</entry>
	<entry>
		<id>https://wiki.7west.org/index.php?title=ATMega328P&amp;diff=7</id>
		<title>ATMega328P</title>
		<link rel="alternate" type="text/html" href="https://wiki.7west.org/index.php?title=ATMega328P&amp;diff=7"/>
		<updated>2025-06-27T15:35:23Z</updated>

		<summary type="html">&lt;p&gt;Animationb: Created page with &amp;quot;This page will detail how to setup a development environment and how to configure and use functions of the ATMega328P  =Environment Setup=  =Functions=  =Bootloader=    =References=&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will detail how to setup a development environment and how to configure and use functions of the ATMega328P&lt;br /&gt;
&lt;br /&gt;
=Environment Setup=&lt;br /&gt;
&lt;br /&gt;
=Functions=&lt;br /&gt;
&lt;br /&gt;
=Bootloader=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;/div&gt;</summary>
		<author><name>Animationb</name></author>
	</entry>
	<entry>
		<id>https://wiki.7west.org/index.php?title=Raspberry_Pi&amp;diff=6</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="https://wiki.7west.org/index.php?title=Raspberry_Pi&amp;diff=6"/>
		<updated>2025-06-27T15:35:09Z</updated>

		<summary type="html">&lt;p&gt;Animationb: Created page with &amp;quot;This is a page full of first-time set up instructions and how to&amp;#039;s for the Raspberry Pi.  == First-Time Setup == ==== Headless Operations ==== Place a file titled &amp;#039;&amp;#039;&amp;#039;ssh&amp;#039;&amp;#039;&amp;#039; in the &amp;quot;boot&amp;quot; directory, when the SD Card is plugged in to a desktop computer.  Place a file titled &amp;#039;&amp;#039;&amp;#039;wpa_supplicant.conf&amp;#039;&amp;#039;&amp;#039; in the same &amp;quot;boot&amp;quot; directory with the following code:  &amp;lt;nowiki&amp;gt; country=US ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1  network={  ssid=&amp;quot;&amp;lt;SSID&amp;gt;&amp;quot;  sc...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a page full of first-time set up instructions and how to&#039;s for the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
== First-Time Setup ==&lt;br /&gt;
==== Headless Operations ====&lt;br /&gt;
Place a file titled &#039;&#039;&#039;ssh&#039;&#039;&#039; in the &amp;quot;boot&amp;quot; directory, when the SD Card is plugged in to a desktop computer.&lt;br /&gt;
&lt;br /&gt;
Place a file titled &#039;&#039;&#039;wpa_supplicant.conf&#039;&#039;&#039; in the same &amp;quot;boot&amp;quot; directory with the following code:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
country=US&lt;br /&gt;
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev&lt;br /&gt;
update_config=1&lt;br /&gt;
&lt;br /&gt;
network={&lt;br /&gt;
 ssid=&amp;quot;&amp;lt;SSID&amp;gt;&amp;quot;&lt;br /&gt;
 scan_ssid=1&lt;br /&gt;
 psk=&amp;quot;&amp;lt;PASSWORD&amp;gt;&amp;quot;&lt;br /&gt;
 key_mgmt=WPA-PSK&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These steps will allow the Raspberry Pi to be reachable via ssh on the first boot. Use Window&#039;s PuTTY or Linux&#039;s ssh to remote in. Use your router&#039;s webpage to find the IP Address of the newly minted Raspberry Pi.&lt;br /&gt;
If you do not have access, try ssh&#039;ing to the hostname &amp;quot;raspberrypi&amp;quot;. On the first boot, the password will be the same as the hostname.&lt;br /&gt;
&lt;br /&gt;
==== First Time Essential Commands ====&lt;br /&gt;
Enter &#039;&#039;&#039;passwd&#039;&#039;&#039; to change the password. Enter the following to always require password when using &#039;&#039;&#039;sudo&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo visudo /etc/sudoers.d/010_pi-nopasswd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Then &#039;&#039;&#039;NOPASSWD&#039;&#039;&#039; to &#039;&#039;&#039;PASSWD&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Enter &#039;&#039;&#039;sudo raspi-config&#039;&#039;&#039; to edit several key Raspberry Pi configurations:&lt;br /&gt;
* Change the hostname&lt;br /&gt;
* Reduce GPU memory (optional)&lt;br /&gt;
* Expand the file system&lt;br /&gt;
* (Optional) Boot / Auto Login&lt;br /&gt;
&lt;br /&gt;
Lastly run &#039;&#039;&#039;sudo apt-get update&#039;&#039;&#039; then &#039;&#039;&#039;sudo apt-get upgrade&#039;&#039;&#039; to update all the software. This will take a while.&lt;br /&gt;
&lt;br /&gt;
==== SD Card Longevity====&lt;br /&gt;
SD Cards are not meant to be written to so many times (i.e. log files). To ensure the SD Card lasts as long as possible, we will do two things.&lt;br /&gt;
&lt;br /&gt;
This will disable the swap file setup on the SD Card by default&amp;lt;ref&amp;gt;[https://raspberrypi.stackexchange.com/questions/169/how-can-i-extend-the-life-of-my-sd-card#:~:text=Leave%20plenty%20of%20free%20space,larger%20area%20of%20free%20space. Stack Exchange: Extending SD Card lifespan]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo swapoff --all&lt;br /&gt;
sudo apt-get remove dphys-swapfile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will install log2ram&amp;lt;ref&amp;gt;[https://levelup.gitconnected.com/extend-the-lifespan-of-your-raspberry-pis-sd-card-with-log2ram-5929bf3316f2 Installing log2ram]&amp;lt;/ref&amp;gt;, which tries to delegate all log file writing to RAM:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo apt-get install git&lt;br /&gt;
git clone https://github.com/azlux/log2ram &amp;amp;&amp;amp; cd log2ram&lt;br /&gt;
chmod +x install.sh &amp;amp;&amp;amp; sudo ./install.sh&lt;br /&gt;
cd .. &amp;amp;&amp;amp; rm -r log2ram&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to&#039;s ==&lt;br /&gt;
====Aliases====&lt;br /&gt;
Editing &#039;&#039;&#039;.bashrc&#039;&#039;&#039; (located in the pi home directory) will let you add aliases. At the bottom of the file add the following:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
alias &amp;lt;shortcut&amp;gt;=&amp;quot;&amp;lt;what you want the shortcut to do&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Make sure there is a carriage return after the last line in the file.&lt;br /&gt;
&lt;br /&gt;
====Uncomplicated Firewall====&lt;br /&gt;
This lets you set up a firewall and add exceptions easily. Enter the following into the terminal&amp;lt;ref&amp;gt;Rasperry Pi Networking Cookbook, by Rick Golden&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo apt-get install ufw&lt;br /&gt;
sudo ufw allow ssh&lt;br /&gt;
sudo ufw enable&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Now you can only reach the Raspberry Pi via SSH. You can enter &#039;&#039;&#039;sudo ufw app list&#039;&#039;&#039; to see other services to add exceptions for. (www = http and https)&lt;br /&gt;
&lt;br /&gt;
====NTFS External HDD====&lt;br /&gt;
If you are headless and mounting an external drive with the NTFS file system, you will need to do the following. External drives will probably not mount if you are headless. First use &#039;&#039;&#039;fdisk -l&#039;&#039;&#039; to find the sda of the external drive. Then in &#039;&#039;&#039;/etc/rc.local&#039;&#039;&#039; add the following line:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
sudo mount /dev/sda# -t ntfs-3g -o permissions /mount/point/folder&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Now you can see the drive on reboots and can edit permissions with &#039;&#039;&#039;chown&#039;&#039;&#039; and &#039;&#039;&#039;chmod&#039;&#039;&#039;. By default, the drive is owned by root. You can change this with:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
sudo chown -R USER /mount/point/folder&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Modify permissions as you please with &#039;&#039;&#039;chmod&#039;&#039;&#039;. &#039;&#039;&#039;700&#039;&#039;&#039; is recommended.&lt;br /&gt;
&lt;br /&gt;
====Samba Server: Network File Server====&lt;br /&gt;
This will set up a shared folder on the Raspberry Pi that will be editable from Windows computers on the same network. Enter the following code on the Raspberry Pi&amp;lt;ref&amp;gt;[https://www.raspberrypi.org/documentation/remote-access/samba.md Official Raspberry Pi Tutorial for Samba]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://raspberrypihq.com/how-to-share-a-folder-with-a-windows-computer-from-a-raspberry-pi/ Share a folder with a Windows Computer]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo apt-get install samba samba-common-bin smbclient cifs-utils&lt;br /&gt;
sudo smbpasswd -a pi&lt;br /&gt;
mkdir ~/shared&lt;br /&gt;
sudo nano /etc/samba/smb.conf&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Inside the config file, ensure there is a line &#039;&#039;&#039;workgroup = WORKGROUP&#039;&#039;&#039; and add the following at the end:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[share]&lt;br /&gt;
     path = /home/pi/shared&lt;br /&gt;
     browseable=yes&lt;br /&gt;
     writeable=yes&lt;br /&gt;
     only guest=no&lt;br /&gt;
     create mask=0777&lt;br /&gt;
     directory mask=0777&lt;br /&gt;
     public=no&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Finally, in Windows File Explorer, right click on &amp;quot;This PC&amp;quot; and select &amp;quot;Map Network Drive...&amp;quot;. Chose a drive letter and set Folder to &#039;&#039;&#039;\\&amp;lt;hostname&amp;gt;\share&#039;&#039;&#039;. Ensure &amp;quot;Connect using different credentials&amp;quot; is checked. Click finish and enter the credentials for user &#039;&#039;&#039;pi&#039;&#039;&#039; twice.&lt;br /&gt;
&lt;br /&gt;
If you&#039;d like to setup an external HDD, change the &#039;&#039;&#039;[share]&#039;&#039;&#039; to another name and the path to the drive: &#039;&#039;&#039;/media/pi/&amp;lt;Drive Name&amp;gt;&#039;&#039;&#039;. This is better for lots of storage as an HDD has much better endurance than an SD Card.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: sometimes you get lucky and this folder appears in &amp;quot;Network&amp;quot; in File Explorer without having to map the drive, but it&#039;s been inconsistent.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Disabling WiFi====&lt;br /&gt;
Used if you have the Raspberry Pi only used for its Ethernet connection and WiFi is useless. In the file &#039;&#039;&#039;/boot/config.txt&#039;&#039;&#039; add the following line&amp;lt;ref&amp;gt;[https://raspberrypi.stackexchange.com/questions/43720/disable-wifi-wlan0-on-pi-3 Stack Exchange: disabling Wifi]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;dtoverlay=disable-wifi&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Flask Python Webserver: Run Python from a website====&lt;br /&gt;
Haven&#039;t done this yet, so figure it out: [https://www.hackster.io/mjrobot/python-webserver-with-flask-and-raspberry-pi-41b5fc  Flask]&lt;br /&gt;
&lt;br /&gt;
====Raspberry Pi Watchdog====&lt;br /&gt;
If you need the Raspberry Pi to run nonstop, you can set up the Watchdog Timer to trigger a reboot if the system hangs. Enter the following in the terminal &amp;lt;ref&amp;gt;[https://diode.io/raspberry%20pi/running-forever-with-the-raspberry-pi-hardware-watchdog-20202/ Setting up Watchdog on Raspberry Pi]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo su&lt;br /&gt;
echo &#039;dtparam=watchdog=on&#039; &amp;gt;&amp;gt; /boot/config.txt&lt;br /&gt;
reboot&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install watchdog&lt;br /&gt;
sudo su&lt;br /&gt;
echo &#039;watchdog-device = /dev/watchdog&#039; &amp;gt;&amp;gt; /etc/watchdog.conf&lt;br /&gt;
echo &#039;watchdog-timeout = 15&#039; &amp;gt;&amp;gt; /etc/watchdog.conf&lt;br /&gt;
echo &#039;max-load-1 = 24&#039; &amp;gt;&amp;gt; /etc/watchdog.conf&lt;br /&gt;
sudo systemctl enable watchdog&lt;br /&gt;
sudo systemctl start watchdog&lt;br /&gt;
sudo systemctl status watchdog&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
It will start itself at boot as well.&lt;br /&gt;
&lt;br /&gt;
====Remote Desktop====&lt;br /&gt;
This will allow you to use the GUI Desktop of the Raspberry Pi remotely. Install xrdp:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo apt-get install xrdp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
From Windows, launch Remote Desktop Connection and connect to the IP Address or hostname of the Raspberry Pi. [https://unix.stackexchange.com/questions/523152/xrdp-disconnects-immediately-after-connection-from-windows10-centos-to-centos7 Maybe?]&lt;br /&gt;
&lt;br /&gt;
====rclone and Google Drive====&lt;br /&gt;
This will let you backup folders to Google Drive. [https://rclone.org/install/ rclone Install] offers a simple walkthrough and can help with any questions. Enter the following in the terminal:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl https://rclone.org/install.sh | sudo bash&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Use rclone&#039;s [https://rclone.org/drive/ Google Drive specific setup page] to install a new remote. Be sure to enter a Client ID and Client Secret; setting it up is shown [https://rclone.org/drive/#making-your-own-client-id here]. If your name is Adriano, you&#039;ve already set most of that up.&lt;br /&gt;
&lt;br /&gt;
Two commands are the most important: &#039;&#039;&#039;copy&#039;&#039;&#039; and &#039;&#039;&#039;sync&#039;&#039;&#039;. &#039;&#039;&#039;Copy&#039;&#039;&#039; moves all files from the source to the destination, &#039;&#039;&#039;sync&#039;&#039;&#039; forces the destination to look like the source (&amp;lt;u&amp;gt;including deleting files&amp;lt;/u&amp;gt;). I recommend &#039;&#039;&#039;sync&#039;&#039;&#039;, just because I don&#039;t like clutter. Create a shell script &#039;&#039;&#039;rclone_cron.sh&#039;&#039;&#039; somewhere:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#!/bin/bash&lt;br /&gt;
if pidof -o %PPID -x “rclone_cron.sh”; then&lt;br /&gt;
exit 1&lt;br /&gt;
fi&lt;br /&gt;
rclone sync -v -u /media/pi/Elements/gdrive rgdrive:sync&lt;br /&gt;
rclone sync -v -u rgdrive:sync /media/pi/Elements/gdrive&lt;br /&gt;
exit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
The first part makes sure the &#039;&#039;syncing&#039;&#039; isn&#039;t already running. The script syncs &amp;quot;twice&amp;quot;, once to make the Google Drive the same as the Network Drive (ignoring more recent files). The second sync can bring more recent files from Google Drive to the Network Drive. Be sure to modify the script to be executable (&#039;&#039;&#039;chmod a+x&#039;&#039;&#039;) Place this script in crontab (&#039;&#039;&#039;crontab -e&#039;&#039;&#039;):&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;0 */4 * * * &amp;lt;path&amp;gt;/rclone_cron.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Now it will sync every 4 hours and log nothing. If you need an immediate sync, just run &#039;&#039;&#039;rclone_cron.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====Setting up MediaWiki====&lt;br /&gt;
Kinda moot because it&#039;s set up here, and if this crashes and I have to set it up again, I can&#039;t read this. However, I will back this page up somewhere. Enter the following into the terminal&amp;lt;ref&amp;gt;[https://www.mediawiki.org/wiki/Manual:Running_MediaWiki_on_Debian_or_Ubuntu MediaWiki&#039;s Guide on Raspberry Pi installation]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo apt-get install -y mediawiki&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This will take a while. Once it is done, we must setup the &amp;quot;SQL Database&amp;quot; (except the package is called mariadb on Raspberry Pi):&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo mariadb -u root -p&lt;br /&gt;
CREATE USER &#039;wikiUser&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;THISpasswordSHOULDbeCHANGED&#039;;&lt;br /&gt;
quit;&lt;br /&gt;
sudo mariadb -u root -p&lt;br /&gt;
CREATE DATABASE my_wiki;&lt;br /&gt;
use my_wiki;&lt;br /&gt;
GRANT ALL ON my_wiki.* TO &#039;wikiUser&#039;@&#039;localhost&#039;;&lt;br /&gt;
quit;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;That password set for wikiUser will be stored in plaintext, so don&#039;t pick a good one&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
No in a browser go to &#039;&#039;&#039;&amp;lt;hostname&amp;gt;/mediawiki&#039;&#039;&#039;. Set up, mostly keeping defaults. Be sure to use the wikiUser and not root for the database user.&lt;br /&gt;
&lt;br /&gt;
Move the &#039;&#039;&#039;LocalSettings.php&#039;&#039;&#039; file to the instructed directory and edit it to change what you want to change. &lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039;&#039;&#039; change &#039;&#039;&#039;$wgMainCacheType = CACHE_ACCEL&#039;&#039;&#039; to &#039;&#039;&#039;$wgMainCacheType = CACHE_ANYTHING&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;/mediawiki&#039;&#039;&#039; used as the main directory for the Wiki, is at &#039;&#039;&#039;/var/lib/mediawiki&#039;&#039;&#039;. It&#039;s all protected, so I recommend running &#039;&#039;&#039;sudo su&#039;&#039;&#039; before editing any of it.&lt;br /&gt;
&lt;br /&gt;
To setup TLS/HTTPS, visit [https://certbot.eff.org/ Certbot] and be sure to forward port 443.&lt;br /&gt;
&lt;br /&gt;
====Setting up a Dynamic DNS====&lt;br /&gt;
I use a Google Domain for this website, so I have to set up a Dynamic DNS in order for the domain to redirect to the Raspberry Pi. First we have to install ddclient&amp;lt;ref&amp;gt;[https://samhobbs.co.uk/2015/01/dynamic-dns-ddclient-raspberry-pi-and-ubuntu ddclient on Raspberry Pi]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo apt-get install ddclient&lt;br /&gt;
sudo nano /etc/ddclient.conf&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Now modify the .conf file you just opened. &#039;&#039;&#039;Note:&#039;&#039;&#039; during the install process ddclient probably prompted you to enter all this info already, but modify this .conf file to show this&amp;lt;ref&amp;gt;[https://support.google.com/domains/answer/6147083?hl=en Dynamic DNS with Google Domains]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;protocol=dyndns2&lt;br /&gt;
use=web&lt;br /&gt;
server=domains.google.com&lt;br /&gt;
ssl=yes&lt;br /&gt;
login=&amp;lt;username&amp;gt;&lt;br /&gt;
password=&#039;&amp;lt;password&amp;gt;&#039;&lt;br /&gt;
7west.org&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Use the &#039; around the password. You get the username and password from the DNS settings of your Google Domain.&lt;br /&gt;
&lt;br /&gt;
ddclient will now update your IP Address every 5 minutes.&lt;br /&gt;
&lt;br /&gt;
====Git Remote Server====&lt;br /&gt;
On the server, cd to the &#039;&#039;&#039;parent directory&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;mkdir RepoName&lt;br /&gt;
cd RepoName&lt;br /&gt;
git init --bare&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Now on the machine with the code and local git repository:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git remote add RemoteName ssh://USER@DOMAIN.com:PORT/file/path/to/RepoName&lt;br /&gt;
git push -u RemoteName main&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
If it fails, it might be your known_hosts file. Look there and delete the applicable row. You also will have to log into USER@DOMAIN.com every time you push.&lt;br /&gt;
&lt;br /&gt;
To clone this remote repo, cd to the desired &#039;&#039;&#039;parent directory&#039;&#039;&#039; and enter the following on the destination machine:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git clone ssh://USER@DOMAIN.com:PORT/file/path/to/RepoName&lt;br /&gt;
git checkout main&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Dwarf Fortress Server====&lt;br /&gt;
This is pretty silly to have here, but here it is. Download and install Dwarf Fortress as the [https://dwarffortresswiki.org/index.php/DF2014:Installation wiki] says. Get the dependancies as [https://www.reddit.com/r/dwarffortress/comments/f0rcn6/libstdcso6_cxxabi_138_not_found/ needed].&lt;br /&gt;
&lt;br /&gt;
Modify init.txt in df_linux/data/init. Turn off sound and change PRINT_MODE to TEXT. Ensure your terminal is set to &#039;&#039;&#039;Use bright colors for bold text&#039;&#039;&#039; (this is in Preferences for the terminal). Then run the following:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo apt install xvfb&lt;br /&gt;
Xvfb :1 -screen 0 1024x768x16 &amp;amp; &lt;br /&gt;
export DISPLAY=:1&lt;br /&gt;
/path/to/df&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You might also want to change some key bindings, like the Plus key.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Animationb</name></author>
	</entry>
	<entry>
		<id>https://wiki.7west.org/index.php?title=Offline_Wikipedia&amp;diff=5</id>
		<title>Offline Wikipedia</title>
		<link rel="alternate" type="text/html" href="https://wiki.7west.org/index.php?title=Offline_Wikipedia&amp;diff=5"/>
		<updated>2025-06-27T15:34:31Z</updated>

		<summary type="html">&lt;p&gt;Animationb: Created page with &amp;quot;This is a look at how one could make an &amp;#039;&amp;#039;&amp;#039;Offline Wikipedia&amp;#039;&amp;#039;&amp;#039;. Offline means without access to the internet. This is &amp;#039;&amp;#039;not&amp;#039;&amp;#039; a doomsday prep project, but just catering to a desire to preserve information and a fun exercise.   ==Basic Considerations== We must consider if we do not have internet, what else do we not have access to. So we will have two approaches: # Electricity and consumer electronics are available # Very long term endurance of the data  ==Approach #1: T...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a look at how one could make an &#039;&#039;&#039;Offline Wikipedia&#039;&#039;&#039;. Offline means without access to the internet. This is &#039;&#039;not&#039;&#039; a doomsday prep project, but just catering to a desire to preserve information and a fun exercise.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Basic Considerations==&lt;br /&gt;
We must consider if we do not have internet, what else do we not have access to. So we will have two approaches:&lt;br /&gt;
# Electricity and consumer electronics are available&lt;br /&gt;
# Very long term endurance of the data&lt;br /&gt;
&lt;br /&gt;
==Approach #1: Tablet==&lt;br /&gt;
This one is pretty easy. &lt;br /&gt;
#Buy an Android tablet with at least 256GB of storage (or a Micro SD card slot). You can buy an e-ink tablet to make it easier to read&lt;br /&gt;
#Install [https://kiwix.org/en/ Kiwix] on the tablet and download the offline version of Wikipedia&lt;br /&gt;
#You&#039;re done&lt;br /&gt;
You can also get a solar powered charger for the tablet and then you wouldn&#039;t need electricity. Eventually the tablet will breakdown as all electronics do.&lt;br /&gt;
&lt;br /&gt;
==Approach #2: Microform==&lt;br /&gt;
In this case we are assuming no electricity and that we want extremely long term endurance of the data. Printing on paper is impossible due to the amount of paper needed. Computers and electronics can last a while, but not the really long time we are looking for. The solution seems to be [https://en.wikipedia.org/wiki/Microform Microform]. This is like microfilm, but is bigger. Many libraries store newspapers and periodicals in this format. Here is some math showing this is possible:&lt;br /&gt;
===The Math===&lt;br /&gt;
*Wikipedia has about 7,000,000 articles&lt;br /&gt;
*Wikipedia is about 4,900,000,000 words&lt;br /&gt;
**Each article has about 700 words&lt;br /&gt;
*This fills about 3,062 volumes (books)&lt;br /&gt;
** with 1,600,000 words per volume (at 6 characters per word)&lt;br /&gt;
** with a volume being 25cm tall and 5cm thick (at 500 sheets, 1000 pages)&lt;br /&gt;
This is too many books, but microform reduces books to ~4% their original size. 3,062 volumes becomes 123 volumes, each in the form of a roll of microform. This makes the Wikipedia collection able to fit in a cabinet.&lt;br /&gt;
&lt;br /&gt;
===The Cost===&lt;br /&gt;
The hypothetical cost is as follows. I found a company that will &amp;quot;microform&amp;quot;-ify your documents for $0.025 (USD) per A4 page (210x297mm)&lt;br /&gt;
*3,062,000 pages&lt;br /&gt;
**3,062 volumes at 1,000 pages each&lt;br /&gt;
*Roughly $77,000.&lt;br /&gt;
This is far from affordable but is very much in the realm of possible.&lt;br /&gt;
&lt;br /&gt;
===Caveats===&lt;br /&gt;
*Format: Wikipedia is not in bounds of volumes, it is in articles. Some utility would have to be programmed to download all of Wikipedia and parse out each article and put them into PDF books to be sent to be &amp;quot;microform&amp;quot;-ified. Wikipedia gives access to anyone to download all of it&#039;s text (I don&#039;t know about images) in some file format. I do not know how to parse or read this format or if it contains images.&lt;br /&gt;
*Table of Contents: You will need a decently sized index or table of contents to make the microform library useful. This is not impossible, but it will have to probably take the form of a book that is 100&#039;s of pages long AND the indexing/order of articles must be considered while parsing Wikipedia during the previous caveat.&lt;br /&gt;
*Images: I don&#039;t think there is an easy way to download images with Wikipedia&#039;s text, like it is with Kiwix in the tablet method.&lt;br /&gt;
*Reading: This is important. It is not always easy to read microform.&lt;br /&gt;
** If your eyes are really good, you can just barely read microform, but most microform storage places have something like a [https://en.wikipedia.org/wiki/Light_table light table] for reading. A light table is definitely a piece of equipment that can require electricity or new manufactured parts, but it&#039;s purpose can be met with a magnifying glass. If one is worried about endurance, but several magnifying glasses.&lt;br /&gt;
** Microform also requires a source of light. A light table takes care of that. Without electricity, maybe a mirror could use daylight to backlight the microform. Without the light table, one could hold the microform up to the sky for backlighting. The other hand can hold the magnifying glass.&lt;br /&gt;
** If you forgo a light table, you would need some device that could hold the microform at a specific page as holding two ends of the microform, keeping the middle part in the light, and holding a magnifying glass is near impossible for one person. A device like this doesn&#039;t really exist, but you could model and 3D print something that would meet these needs.&lt;br /&gt;
*Endurance: Microform will not last 1000 years like a stone tablet or printed page might, but it is claimed that it can last ~100s of years.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
*Microfiche might be better. It is like microform but not in a roll. A &#039;&#039;page&#039;&#039; can hold dozens of pages. It would be easier to read than a roll, but it might also take up a little more space. Microfiche &#039;&#039;can&#039;&#039; (some forms of microfiche cannot) hold at a better ratio (~1% vs the ~4% of microform), but a microfiche page is thicker than a piece of paper if stored in a binder, for example. However, microfiche may be easier to index or &amp;quot;flip through&amp;quot; to find what you need, as opposed to spooling through a roll.&lt;/div&gt;</summary>
		<author><name>Animationb</name></author>
	</entry>
	<entry>
		<id>https://wiki.7west.org/index.php?title=Project_Marathon&amp;diff=4</id>
		<title>Project Marathon</title>
		<link rel="alternate" type="text/html" href="https://wiki.7west.org/index.php?title=Project_Marathon&amp;diff=4"/>
		<updated>2025-06-27T15:34:11Z</updated>

		<summary type="html">&lt;p&gt;Animationb: Created page with &amp;quot;Project Marathon started out as an effort to build a long range radio project that would transmit data or even pictures over long distances. In the end it just ended up being a test of LoRa&amp;#039;s capabilities, where I just tested signal strengths and successful transmissions at various distances.  This project page will detail the setup and the tests done.  ==Setup== ===Raspberry Pi Pico=== The Pico was used in this project because it&amp;#039;s cool and new. But also because when ru...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Project Marathon started out as an effort to build a long range radio project that would transmit data or even pictures over long distances. In the end it just ended up being a test of LoRa&#039;s capabilities, where I just tested signal strengths and successful transmissions at various distances.&lt;br /&gt;
&lt;br /&gt;
This project page will detail the setup and the tests done.&lt;br /&gt;
&lt;br /&gt;
==Setup==&lt;br /&gt;
===Raspberry Pi Pico===&lt;br /&gt;
The Pico was used in this project because it&#039;s cool and new. But also because when running MicroPython, the Pico can act as a easy to use terminal to interact with circuits or chips. In this case, the Pico&#039;s SPI capability allowed for control of the RFM95W. Essentially, if you define functions in the &#039;&#039;main.py&#039;&#039; file you upload to the Pico, you can trigger complicated actions with over the REPL terminal.&lt;br /&gt;
&lt;br /&gt;
REPL is actually the key to all of this and it basically makes the Pico act like a Python terminal when plugged into a computer. In short, I only really wanted to control the RFM95W and the Pico offered the easiest interface to do this.&lt;br /&gt;
&lt;br /&gt;
===RFM95W - LoRa Module===&lt;br /&gt;
I went with this module because I own two of them and they offer the best range from the modules I could find. (If there is a better module I missed, let me know somehow.) I attached a quarter wavelength antenna to each RFM95W with -3 dBi.&lt;br /&gt;
&lt;br /&gt;
===Software===&lt;br /&gt;
&lt;br /&gt;
==Test Results==&lt;/div&gt;</summary>
		<author><name>Animationb</name></author>
	</entry>
	<entry>
		<id>https://wiki.7west.org/index.php?title=Project_Quartz&amp;diff=3</id>
		<title>Project Quartz</title>
		<link rel="alternate" type="text/html" href="https://wiki.7west.org/index.php?title=Project_Quartz&amp;diff=3"/>
		<updated>2025-06-27T15:34:01Z</updated>

		<summary type="html">&lt;p&gt;Animationb: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Project Quartz&amp;#039;&amp;#039;&amp;#039; consists of two major components: # Wristwatch - small, comfortable, no wireless capabilities, and decent battery life # Base - connects to the watch to charge it and sync it&amp;#039;s clock with GPS   ===Project Metrics=== {| class=&amp;quot;wikitable&amp;quot; |- | State Date:|| December 2017 |- | Completion Date:|| January 2021 |- | Cost:|| $1,000,000 |}  ==Hardware== ===Base=== The base is made up of two stacked 60x160 mm circuit boards housed in a 3D printed case. The Ba...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Project Quartz&#039;&#039;&#039; consists of two major components:&lt;br /&gt;
# Wristwatch - small, comfortable, no wireless capabilities, and decent battery life&lt;br /&gt;
# Base - connects to the watch to charge it and sync it&#039;s clock with GPS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Project Metrics===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| State Date:|| December 2017&lt;br /&gt;
|-&lt;br /&gt;
| Completion Date:|| January 2021&lt;br /&gt;
|-&lt;br /&gt;
| Cost:|| $1,000,000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
===Base===&lt;br /&gt;
The base is made up of two stacked 60x160 mm circuit boards housed in a 3D printed case. The Base features three buttons and one 7-segment display. Two buttons are for changing the time zone and the third interacts with the syncing process. The display shows relevant information, depending on what is happening. &lt;br /&gt;
&lt;br /&gt;
The Base is rather large probably a bit over-engineered. If I had to do it again, I would have found a way to make it all smaller.&lt;br /&gt;
====Microcontroller====&lt;br /&gt;
An &#039;&#039;&#039;ESP32&#039;&#039;&#039; controls all the Base operations. An &#039;&#039;&#039;ESP32 DevKitC&#039;&#039;&#039; is plugged into female headers on the Base. From there is controls the powering up and running of the &#039;&#039;&#039;GPS Module&#039;&#039;&#039;, the setting of time zones, the 7-segment display, and the time message that is sent to the Watch. The &#039;&#039;&#039;ESP32&#039;&#039;&#039; is in Deep Sleep most of the time and only wakes up when syncing the Watch.&lt;br /&gt;
&lt;br /&gt;
Originally, I went with the &#039;&#039;&#039;ESP32&#039;&#039;&#039; because I had never worked with it before and I had the intention of using NTP time over WiFi as a backup to GPS, but that was more work that it was worth. I should have gone with the &#039;&#039;&#039;ATSAMD21G18&#039;&#039;&#039; or a variant with more pins.&lt;br /&gt;
&lt;br /&gt;
====Power====&lt;br /&gt;
The power system is intricate but robust. The base is charged via a Micro USB port (USB-C is still out of my scope), which charges two 18650 Li-Ion batteries. The batteries are boosted to the necessary 5V for the ESP32 and 7-segment display. Also part of the Base&#039;s power system is a second Lithium battery charger for the Watch&#039;s battery (to save space on the Watch). The Base draws 6mA when sleeping, giving it a battery life of over 30 days while sleeping.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Lithium Chargers&#039;&#039;&#039; - MCP73871 - Great lithium battery charger (lipo and li-ion), I have used it many times and always been happy with it&lt;br /&gt;
* &#039;&#039;&#039;Voltage Booster&#039;&#039;&#039; - TPS61020 - &lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
The &#039;&#039;&#039;7-Segment Display&#039;&#039;&#039; is just a 3 digit display that says gives time sync status and shows the time zone.&lt;br /&gt;
The &#039;&#039;&#039;GPS Module&#039;&#039;&#039; locks onto GPS satellites and sends an NMEA message to the &#039;&#039;&#039;ESP32&#039;&#039;&#039;, of which the time is parsed.&lt;br /&gt;
====Models====&lt;br /&gt;
Base Eagle files (schematics and boards): [[:File:BaseEagle.zip]]&lt;br /&gt;
&lt;br /&gt;
Base 3D files (.stl): [[:File:BaseSTL.zip]]&lt;br /&gt;
===Watch===&lt;br /&gt;
The Watch&#039;s main component is a 28x25 mm L-shaped circuit board that hosts the microcontroller, Real Time Clock (&#039;&#039;&#039;RTC&#039;&#039;&#039;), and the Liquid Crystal Display (&#039;&#039;&#039;LCD&#039;&#039;&#039;). It is contained in a 3D printed case with wrist-straps salvaged from another watch.&lt;br /&gt;
&lt;br /&gt;
====Microcontroller====&lt;br /&gt;
An &#039;&#039;&#039;ATMega328P&#039;&#039;&#039; controls the Watch&#039;s functions: reading the time, updating the &#039;&#039;&#039;LCD&#039;&#039;&#039;, and parsing the time message from the Base. The &#039;&#039;&#039;ATMega328P&#039;&#039;&#039; was selected due to its small package (4x4 mm) and low power consumption.&lt;br /&gt;
&lt;br /&gt;
====Power====&lt;br /&gt;
A 60mAh Lithium Polymer battery powers the Watch. The Watch easily lasts longer than a week on a single charge. The battery is charged via a pin when connected to the Base. The charge controller sits on the Base, not the Watch.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
The &#039;&#039;&#039;LCD&#039;&#039;&#039; is an ERC12864-10 LCD. It is a black and white LCD with a built in backlight. It&#039;s resolution is 128x64 pixels.&lt;br /&gt;
The &#039;&#039;&#039;RTC&#039;&#039;&#039; is an RV-3028, chosen for its extremely low power requirements and small size. It is smaller than a grain of rice!&lt;br /&gt;
&lt;br /&gt;
====Models====&lt;br /&gt;
Watch Eagle files (schematics and boards): [[:File:WatchEagle.zip]]&lt;br /&gt;
&lt;br /&gt;
Watch 3D files (.stl): [[:File:WatchSTL.zip]]&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===GPS and NMEA Sentences===&lt;br /&gt;
The first step in getting the time is receiving it from the &#039;&#039;&#039;GPS Module&#039;&#039;&#039;. GPS is normally used to calculate one&#039;s location on Earth, however, essential to calculating that, the &#039;&#039;&#039;GPS Module&#039;&#039;&#039; needs to know exactly what time it is, which the GPS Satellites help achieve. I simply take this time from the module. The &#039;&#039;&#039;GPS Module&#039;&#039;&#039; outputs National Marine Electronics Association (NMEA) sentences. They are standard across many GPS Modules and each sentence gives slightly different information. Project Quartz uses the GPRMC sentence, because it has the time, along with other basic GPS info (latitude, longitude, altitude, other-udes). Parsing of the NMEA sentence is done by a library I made, included at the end of this section. From the parsed time, the Base converts it into the bytes to be written to the Watch&#039;s &#039;&#039;&#039;RTC&#039;&#039;&#039;. Part of the conversion process relies on Andreas Spiess&#039; [https://github.com/SensorsIot/NTPtimeESP NTP Library], not for NTP, but for its Unix-to-Normal time conversion and calculation of Leap Years and Day Light Saving Time. I did make some small changes to the library to make it not use WiFi.&lt;br /&gt;
&lt;br /&gt;
The only flaw in this process, is that while the Base is sleeping, the GPS Module is turned off (it draws 200mA). So when the Watch is placed on the Base, the &#039;&#039;&#039;ESP32&#039;&#039;&#039; wakes up the &#039;&#039;&#039;GPS Module&#039;&#039;&#039; and waits for a lock on the GPS&#039;s location and time, which can take up to 5 minutes. I&#039;ve also found a weird bug where the time generated from my recently locked &#039;&#039;&#039;GPS Module&#039;&#039;&#039; is exactly 3 seconds fast. However, after letting the GPS stay locked for about 20 minutes, the time becomes correct. I&#039;m not sure what the source of this bug is, but I suspect the &#039;&#039;&#039;GPS Module&#039;&#039;&#039; is getting old, because it didn&#039;t used to do this.&lt;br /&gt;
&lt;br /&gt;
[[:File:NMEAsentenceParser.zip]]&lt;br /&gt;
&lt;br /&gt;
===ERC LCD Driver===&lt;br /&gt;
Writing to displays has always been a fun challenge with the &#039;&#039;&#039;ATMega328P&#039;&#039;&#039;. Due to it&#039;s 2KB of SRAM, it cannot hold a buffer for all 128x64 pixels. Therefore, on each screen update, the microcontroller must calculate what pixels are black or white based on the current time. The &#039;&#039;&#039;LCD&#039;&#039;&#039; is updated in 8-bit tall pages that run the length of the display; therefore, most updates do not include the date. Stored in Program Memory (so it takes up Flash, not SRAM) is a table of the bits needed for numbers 0-9 for their large and small forms. There is also a table for the few letters used. When updating the display, the code uses the current time and the location in the page to determine what bits to pull from the tables and push to the &#039;&#039;&#039;LCD&#039;&#039;&#039;. Lastly, there are two types of display updates: one that only updates the time, which occurs every second, and the other which updates the time and date, which occurs every hour.&lt;br /&gt;
&lt;br /&gt;
This method saves SRAM, but does cost time in the form of CPU cycles. At the end of the day, the shorter screen update only takes a dozen milliseconds and is barely noticeable. However, designing this code did take a lot more effort. I&#039;ve found that is always the trade off with microcontrollers, you can either have speed or RAM. If you need more speed you need more RAM, if you don&#039;t have enough RAM your speed takes a hit.&lt;br /&gt;
&lt;br /&gt;
===Watch-to-Base Interface===&lt;br /&gt;
The interface between the Watch and Base is a complicated and time sensitive handshake, because it sets the time on the Watch. There are 5 pins that are used for this interface, wired differently on each component (Watch vs Base):&lt;br /&gt;
* PLACE_W&lt;br /&gt;
** Watch - This pin is tied to Ground&lt;br /&gt;
** Base - This pin is pulled up, but when it is set Low by plugging in the Watch, the &#039;&#039;&#039;ESP32&#039;&#039;&#039; wakes up and begins the syncing process&lt;br /&gt;
* INT1&lt;br /&gt;
** Watch - This pin is pulled down to Ground, but when set High the Watch stops everything and waits for the time message&lt;br /&gt;
** Base - This pin is controlled by the &#039;&#039;&#039;ESP32&#039;&#039;&#039; and let&#039;s it tell the Watch to get ready for the time message&lt;br /&gt;
* RX/TX&lt;br /&gt;
** Watch - Using UART, the &#039;&#039;&#039;ATMega328P&#039;&#039;&#039; receives the time message and sets the &#039;&#039;&#039;RTC&#039;&#039;&#039;&lt;br /&gt;
** Base - Sends the time message via UART.&lt;br /&gt;
* The other two pins are used for GND and VBAT to charge the Watch&#039;s battery&lt;br /&gt;
&lt;br /&gt;
The process is mostly described by the pins above, but here it is more clearly. The Watch is placed on the Base, pulling the Base&#039;s PLACE_W pin Low. This wakes up the ESP32, which turns on the &#039;&#039;&#039;GPS Module&#039;&#039;&#039; (if it is asleep) and begins requesting the time. Once the &#039;&#039;&#039;GPS Module&#039;&#039;&#039; gives the time to the &#039;&#039;&#039;ESP32&#039;&#039;&#039;, it tells the Watch to prepare for the time message and converts the GPS time into a the proper time message. Before sending the time, the &#039;&#039;&#039;ESP32&#039;&#039;&#039; inserts a delay and adds 2 seconds to the GPS time. This is done to compensate for the time it takes to receive and process the GPS time. Finally the &#039;&#039;&#039;ESP32&#039;&#039;&#039; sends the time message to the &#039;&#039;&#039;ATMega328P&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The time message is exactly the bytes that need to be written to the &#039;&#039;&#039;RTC&#039;&#039;&#039; on the Watch. The time message also includes a multi-function byte at the end. This last byte will tell the Watch how many days until the next &amp;quot;Day Light Savings Event&amp;quot; and on that day, depending on what month it is, the Watch automatically adjusts the hour. The last byte&#039;s other function occurs if the time syncing process is cancelled before &#039;&#039;&#039;GPS Module&#039;&#039;&#039; acquires the time. In this case, the Base only sends the time change if the Watch, Base, and user have changed time zones.&lt;br /&gt;
&lt;br /&gt;
The time message is pretty cool and compact, however by far the hardest part of all of this was working with the &#039;&#039;&#039;GPS Module&#039;&#039;&#039;. There seemed to me a dozen edge cases where the GPS would get a lock but not the time, or it would have the time but send it a half a second off from what was expected. The code for the Base has a lot of waiting for the GPS to &amp;quot;get its crap together&amp;quot; and produce a reliable NMEA sentence. That is why 2 seconds are added to the time, as mentioned above.&lt;br /&gt;
&lt;br /&gt;
===The Code===&lt;br /&gt;
Base Code: [[:File:BaseCode.zip]]&lt;br /&gt;
&lt;br /&gt;
Watch Code: [[:File:WatchCode.zip]]&lt;/div&gt;</summary>
		<author><name>Animationb</name></author>
	</entry>
	<entry>
		<id>https://wiki.7west.org/index.php?title=Main_Page&amp;diff=2</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.7west.org/index.php?title=Main_Page&amp;diff=2"/>
		<updated>2025-06-27T15:33:50Z</updated>

		<summary type="html">&lt;p&gt;Animationb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A wiki for 7West (mostly Adriano) to keep track of projects and other important information:&lt;br /&gt;
&lt;br /&gt;
===Projects:===&lt;br /&gt;
&lt;br /&gt;
* [[Project Quartz]]&lt;br /&gt;
&lt;br /&gt;
* [[Project Marathon]]&lt;br /&gt;
&lt;br /&gt;
* [[Offline Wikipedia]]&lt;br /&gt;
&lt;br /&gt;
===Microcontroller/SBC Guides===&lt;br /&gt;
&lt;br /&gt;
* [[ATMega328P]]&lt;br /&gt;
&lt;br /&gt;
* [[Raspberry Pi]]&lt;br /&gt;
&lt;br /&gt;
==== Keeping this as I set up the site ====&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User&#039;s Guide]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Animationb</name></author>
	</entry>
</feed>