1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
|
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="color-scheme" content="dark light">
<link rel="icon" href="data:,">
<title>Portable Pi: Cheap Raspberry Pi Zero Hacker Terminal</title>
<link href="/atom.xml" type="application/atom+xml" rel="alternate" title="Atom feed for blog posts" />
<link href="/rss.xml" type="application/rss+xml" rel="alternate" title="RSS feed for blog posts" />
<style>*{box-sizing:border-box;}body{font-family:sans-serif;line-height:1.33;margin:0 auto;max-width:650px;padding:1rem;}blockquote{background:rgba(0,0,0,0.1);border-left:4px solid;padding-left:5px;}img{max-width:100%;}pre{border:1px solid;overflow:auto;padding:5px;}table{text-align:left;width:100%;}.footnotes{font-size:90%;}</style>
</head>
<nav>
<a href="#menu">Menu ↓</a>
</nav>
<main>
<h1 id="portable-pi-cheap-raspberry-pi-zero-hacker-terminal">Portable Pi: Cheap Raspberry Pi Zero Hacker Terminal</h1>
<p>2020-09-16</p>
<p><em>I recently came across <a href="https://n-o-d-e.net/zeroterminal3.html">the incredibly cool design</a> for an “ultimate Raspberry Pi computer”</em> by NODE and was inspired to create my own “portable” Pi device. Although, with my concept, I decided to set a few restrictions on the build:</p>
<ul>
<li>I wanted to keep the total cost as low as possible
<ul>
<li>including the Pi Zero <em>and</em> extra hardware</li>
</ul></li>
<li>I wanted to avoid any custom casings or need for 3D printed materials</li>
<li>I wanted to make the full design extremely portable / lightweight</li>
<li>I wanted to keep the build as user-friendly as possible (no soldering, odd hacks etc.)</li>
</ul>
<p>With these constraints put in place, I built my very own Raspberry Pi Zero “hacker” terminal. You can see the finished product below:</p>
<p><img src="/public/images/portable-pi-1.webp" alt="Portable Pi front" /></p>
<p><img src="/public/images/portable-pi-2.webp" alt="Portable Pi back" /></p>
<p>I’m pretty happy with the final outcome and best of all - you can easily recreate this yourself with little-to-no effort!</p>
<p>So enough chit-chat - let’s build this bad-boy!</p>
<blockquote>
<p><strong>Note:</strong> Most items in the hardware section are Amazon affiliate links</p>
</blockquote>
<h2 id="table-of-contents">Table of Contents</h2>
<ol>
<li><a href="#expectations">Setting Expectations</a></li>
<li><a href="#hardware">The Hardware</a></li>
<li><a href="#software">The Software</a></li>
<li><a href="#setup">Getting Setup</a></li>
<li><a href="#summary">Final Summary</a></li>
</ol>
<p><strong>This hardware will not</strong> replace your laptop or any other “high-powered” portable device. Honestly, you’re mobile phone would (most likely) work better in terms of a compact-sized computer. The concept behind this “portable pi” project was to make something <em>for fun</em>.</p>
<p>Please reserve any sassy comments about how buying a cheap $50 laptop off eBay would be more efficient than building out something like I have done here. You’re missing the point entirely.</p>
<p>Moving on for those still interested… </p>
<p>I live in Canada, so some of the options are based on available hardware near my location. You’re likely to find similar hardware close to your own country for better pricing / shipping costs.</p>
<blockquote>
<p><strong>Note</strong>: I’ve decided to use a wireless, USB dongle-based keyboard. You can opt to use a bluetooth-based keyboard, but I just find them more trouble than they are worth (keeping a charge, losing connections, interference from other devices)</p>
</blockquote>
<ul>
<li>SBC: <a href="https://amzn.to/3jCVXHG">Raspberry Pi Zero WH</a></li>
<li>Storage / OS: <a href="https://amzn.to/2GHm01R">64GB Micro SD Card</a> (Always have an SD backup!)</li>
<li>Battery HAT: <a href="https://amzn.to/3jGq8xp">Li-ion Battery HAT</a></li>
<li>Battery: <em>This depends on your location. I was able to order <a href="https://www.walmart.ca/en/ip/Brand-New-4-Pcs-2500mAh-TR14500-3-7V-Rechargeable-Li-ion-Battery-for-Flashlight-Torch/PRD3Z73LMZZ3VK9">online through Walmart</a>, but if you live in the USA there are plenty of battery-specific vendors available. Find whatever works best for your needs!</em></li>
<li>Display: <a href="https://www.buyapi.ca/product/3-5-inch-raspberry-pi-tft-display/">KeDei 3.5-inch TFT Display</a></li>
<li>Keyboard: <a href="https://amzn.to/2Gqkwt6">Mini USB Wireless Keyboard</a></li>
<li>Adapter: <a href="https://amzn.to/36I6T3c">Micro USB OTG Cable</a></li>
</ul>
<h4 id="raspberry-pi-zero-wh">Raspberry Pi Zero WH</h4>
<p>You will need a Raspberry Pi Zero W with GPIO header pins already soldered on to the board. (You could also do this yourself manually if you have the tools and skill to do so)</p>
<h4 id="li-ion-battery-hat">Li-Ion Battery HAT</h4>
<p>This HAT holds a single li-ion battery and for our purposes will connect with our Pi Zero via the GPIO header pins. You could also look into double-set battery HATs if that is something you would prefer - for my needs a single rechargeable battery works fine.</p>
<p>Since our main “OS” is purely terminal based, I find you don’t really need a li-ion battery with a massive amount of power storage. 2500mAh will easily last a handful of hours mucking about with emails, files and web browsing. Plus, you can always carry a few extras for swapping out on-the-go.</p>
<h4 id="3.5-inch-tft-display">3.5-inch TFT Display</h4>
<p>A simple and fairly cheap touchscreen display. We won’t require our display to render videos or pretty graphics (since we will be entirely terminal-based) so this works just fine for our needs. I am using version 6.3 for this build.</p>
<h4 id="micro-usb-otg-adapter">Micro USB OTG Adapter</h4>
<p>As mentioned above, this item is optional if you feel more comfortable with using a pure bluetooth keyboard. I just personally prefer this method.</p>
<h4 id="wireless-keyboard">Wireless Keyboard</h4>
<p>In my product demo image at the beginning of the article, I’m actually using an old Logitech wireless keyboard since this one still hasn’t arrived. I plan to swap them out once I have it - the Logitech is far to large to be deemed “portable”.</p>
<ul>
<li>Operating System: <a href="https://www.raspberrypi.org/downloads/raspberry-pi-os/">Raspberry Pi OS Lite</a></li>
<li>Display Driver: <a href="http://kedei.net/raspberry/raspberry.html">KeDei 3.5 Driver</a></li>
<li>Email: <a href="https://github.com/LukeSmithxyz/mutt-wizard">Neomutt</a> (via Mutt Wizard)</li>
<li>Web Browser: <a href="https://lynx.browser.org/">Lynx</a></li>
<li>Text Editor: <a href="https://www.nano-editor.org/">Nano</a></li>
<li>Code Editor: <a href="https://www.vim.org/">Vim</a></li>
</ul>
<p>I will be setting up this “portable pi” via <a href="https://www.raspberrypi.org/documentation/configuration/wireless/headless.md">headless installation</a> with my main <a href="https://uglyduck.ca/my-pi-desktop/">Raspberry Pi 4 desktop</a>. Included below are some quick instructions on how to setup the Raspberry Pi Zero for <code>ssh</code> access.</p>
<h4 id="preparing-the-microsd-card">Preparing the microSD card</h4>
<ul>
<li><p>Use Raspberry Pi Imager to write the Raspberry Pi Lite OS to your microSD card
<ul>
<li>Once complete, remove the microSD storage device and then re-connect it</li>
</ul></p></li>
<li><p>Navigate to the <code>boot</code> folder of the microSD device - we will be adding 2 files here
<ul>
<li>First add a completely empty file and name it <code>ssh</code> (no file extension)</li>
<li>Next add an empty file named <code>wpa_supplicant.conf</code></li>
</ul></p></li>
<li><p>Open the <code>wpa_supplicant.conf</code> file in a code / text editor and paste the following (be sure to change <code>country</code> to your proper country code, as well as properly setting your network name / password):</p>
<p>ctrl<em>interface=DIR=/var/run/wpa</em>supplicant GROUP=netdev
update_config=1
country=US</p>
<p>network={
ssid="Your network name/SSID”
psk="Your WPA/WPA2 security key”
key_mgmt=WPA-PSK
}</p></li>
<li><p>Unmount the microSD device, then place the microSD card in your RPi Zero</p></li>
<li><p>Assemble the Raspberry Pi Zero with the Battery HAT (li-ion battery attached) connected via GPIO pins, and the 3.5 display connected on-top of the battery HAT’s pins</p></li>
<li><p>Turn on the battery HAT switch to power the RPi Zero. Give the device roughly 90 seconds to perform the initial boot</p></li>
</ul>
<blockquote>
<p><strong>Note</strong>: the display will turn on but only show a white screen - this is normal</p>
</blockquote>
<h4 id="connecting-to-your-zero-via-ssh">Connecting to your Zero via SSH</h4>
<p>Open the terminal on your Raspberry Pi desktop and enter the following command:</p>
<pre><code>ssh pi@raspberrypi.local
</code></pre>
<p>You will then be asked if you wish to trust this device (say yes), then prompted for the <code>pi</code> user’s password - which is <code>raspberry</code>. After a moment you will be directly connected to your Raspberry Pi Zero. Hooray!</p>
<p>We just want to make a couple small configuration changes before going forward (mostly for security):</p>
<ol>
<li>Run the command <code>sudo raspi-config</code></li>
<li>Select “Change User Password” from the menu and change the password
<img src="/public/images/raspi-config.webp" alt="Raspberry config" /></li>
<li>After that, select “Network Options” and change your device name
<ul>
<li>This will avoid any conflicts of connecting to newer RPi devices down the line</li>
</ul></li>
</ol>
<p>That’s it!</p>
<h4 id="installing-display-driver">Installing display driver</h4>
<p>Next we will need to download and run the drivers needed for our 3.5-inch display to play nicely with our Pi Zero (just a blank white screen doesn’t help us much). While connected to our RPi Zero via SSH, run the following commands:</p>
<pre><code>wget http://kedei.net/raspberry/v6_1/LCD_show_v6_1_3.tar.gz
</code></pre>
<p>If you have snail-paced rural internet like I do, now is a good time to go and grab a coffee while this download completes.</p>
<p>Once the download has finished, extract the contents and navigate to the new directory and install the driver:</p>
<pre><code>sudo tar xzf LCD_show_v6_1_3.tar.gz
cd LCD_show_v6_1_3
sudo ./LCD35_v
</code></pre>
<p>Once completed, the RPi Zero will reboot and everything should work as expected!</p>
<h4 id="installing-software">Installing software</h4>
<p>I’m not going to jump into heavy details about installing terminal-based software for this setup. The links I’ve attached in the software section should provide you with more than enough information to get started. For reference, I’m using a very basic set of applications:</p>
<ul>
<li>Neomutt (emails)</li>
<li>Lynx (quick and simple web browsing)</li>
<li>Nano (writing notes / blog posts in a hurry)</li>
<li>Vim (making any config edits or project work)</li>
</ul>
<p>There you have it - a terminal-based, portable Raspberry Pi Zero “hacker” device. </p>
<p>Is it practical? Not really. Can it replace any other <em>portable</em> device you might own? Probably not. Is it fun to make and experiment on? You bet! And in the end - isn’t that what matters most with pet Pi projects?</p>
<footer role="contentinfo">
<h2>Menu Navigation</h2>
<ul id="menu">
<li><a href="/">Home</a></li>
<li><a href="/projects">Projects</a></li>
<li><a href="/uses">Uses</a></li>
<li><a href="/wiki">Wiki</a></li>
<li><a href="/resume">Resume</a></li>
<li><a href="/colophon">Colophon</a></li>
<li><a href="/now">Now</a></li>
<li><a href="/donate">Donate</a></li>
<li><a href="/atom.xml">RSS</a></li>
<li><a href="#top">↑ Top of the page</a></li>
</ul>
<small>
Built with <a href="https://git.sr.ht/~bt/barf">barf</a>. <br>
Maintained with ♥ for the web. <br>
Proud supporter of <a href="https://usefathom.com/ref/DKHJVX">Fathom</a> & <a href="https://nextdns.io/?from=74d3p3h8">NextDNS</a>. <br>
The content for this site is <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>.<br> The <a href="https://git.sr.ht/~bt/bt.ht">code for this site</a> is <a href="https://git.sr.ht/~bt/bt.ht/tree/master/item/LICENSE">MIT</a>.
</small>
</footer>
|