Connecting in Lockdown — Raspberry Pi Zoom Box
My city has been in lockdown since the middle of June 2021 in an attempt to reduce the spread of the Delta strain of COVID-19. I am extremely lucky. I’m fully vaccinated and I live with my partner whom I actually enjoy spending extended amounts of time with. We live in a townhouse with good internet and no children where we can work and relax in different rooms. We both have well-paid jobs that translate well to remote work and I have managers who are extremely understanding and supportive when it comes to mental health. We were already well set up for the isolation of lockdown; not socialising a great deal and not being particularly fond of large groups of people. The only major change has been not travelling to see our parents or going for daily walks in the national park. Others are far less fortunate, particularly those who do not have the skills or access to technology. Our family has a get-together on Zoom for an hour every couple of weeks and my partner’s grandmother wanted to join in as she hasn’t seen anyone other than my partner in several months. She is in her 90s and has had double vision her entire life. She has a smartphone, but she can’t use it beyond its basic functionality. She doesn’t have easy access to the internet and she doesn’t need a laptop for anything beyond video calls.
This is a long article (almost 30 minutes!). The first couple of paragraphs are a guide to using devices you may already own to help relatives and friends for whom technology is a barrier to staying connected throughout the pandemic. What follows is a detailed step by step tutorial of how I created a simple Zoom machine with a Raspberry Pi computer and an LTE modem. It’s been written as a gentle introduction to the Raspberry Pi and its capabilities with a little bit of Linux thrown in with the hope of inspiring people to work on their own projects. Please read as much or as little as you want!
Internet Connection
Everything else is much easier if you already have internet access. If not, there are a couple of options. The first option is a traditional internet connection, either wired/fibre in built-up areas or satellite in more remote areas. This is typically more expensive but more reliable however it may be overkill for what you are trying to achieve or not an option for other reasons. The simplest solution is to order a wireless modem and SIM from a mobile carrier. You can also order these separately, but you need to be aware of which frequency bands are in use in your country when selecting a wireless modem. It’s possible to get a fixed wireless LTE modem but portable LTE modems are much more versatile and have the benefit of working during blackouts, provided your local towers still have electricity. I chose a 12GB plan which should be more than enough for a couple of video calls each month. Go for more if you need more, opt for less to save money or if you think you will use less. Phones and tablets may have LTE connectivity built in, meaning you only need to find a SIM. The next option is becoming rarer as wireless dongles are far more versatile, but USB LTE modems are still around and are perfect if you have a single device with a USB port you want to access the internet from. Again, these can be had from a mobile carrier with a SIM or bought separately.
Devices
Everything else starts to fall into place once you have an internet connection. The best option is a modern smartphone or an old iPad or Android tablet you don’t use anymore. These are good because touch interfaces tend to be more intuitive to use and most phones and tablets include a front-facing camera, microphone and speakers. Higher-end tablets may also have built in LTE as I mentioned above. One thing to keep in mind is that older devices may no longer receive software or security updates. Keeping this in mind I recommend using older iPads rather than Android tablets as Apple has historically supported their older devices far longer than Android device manufacturers. Another option is to use an old laptop provided it runs Windows 10 or a recent release of macOS. If you have a PC running Windows 8 or earlier, I recommend installing Linux. This is very straightforward these days and it is a great free alternative that may also breathe new life into older hardware. There are plenty of guides online on how to do this. My general recommendations are to go with one of the more popular versions (called distros) that have a user interface you find intuitive. Some distros are more resource hungry than others so if you are working with older hardware, I recommend looking into installing one of the popular “lighter” distros that are designed to run on older devices. Many distros give you the option to boot from a USB stick on the target computer to test it before installing.
Remote Management
Remote support and management are extremely useful in helping people get connected as well as troubleshoot any issues as they arise. This is very straightforward on computers but much less so for phones and tablets. In the interests of full disclosure, I have researched the options below. but I haven’t personally tried all of them. Please do your own research before committing to a provider or installing any software. Windows 10 has Remote Desktop built in and you can control the target computer from other Windows 10 PCs and through apps for iOS and Android. Remote Desktop is also available on macOS, but you will need additional software to control a Mac from a non-Mac device. I personally use RealVNC as I need remote access to both Windows and Linux devices.
There are surprisingly few decent articles that address remote support and control of mobile devices. This article is the best I have found, although it was published in 2016 so some products have been discontinued or renamed. This article is more recent and has some additional options but it confuses being able to control PCs from Android and controlling Android devices remotely from other devices. There are a few well-known names in the space such as LogMeIn, TeamViewer and Splashtop, however they tend to cater to larger business and enterprise customers.
Splashtop SOS works for both iOS and Android, however depending on the device you wish to control it may not be fully unattended access, meaning you might have to log in physically on the device. Splashtop also offer solutions for Windows, macOS and Linux. They have a free trial and a couple of paid tiers.
GoToAssist by LogMeIn offers iOS and Android remote support but not all features are unattended, meaning some input will be required physically on the device rather than remotely. LogMeIn also offers services for remote access of devices running macOS and Windows. LogMeIn offers a free trial and paid tiers.
TeamViewer is extremely powerful but also extremely convoluted when trying to find which of the services they offer is the best fit. They offer remote support for Android and iOS with Quicksupport. This is attended for iOS, but unattended for many flavours of Android with TeamViewer Host. TeamViewer offers a free tier for personal use.
iOS includes a feature called Switch Control, allowing users to control devices remotely however they must be connected to the same network. Other solutions include AirDroid, APowerMirror and ISL Online. These are lesser known but may still be useful options. AirDroid is more affordable than some of the other options above.
My Solution — A Raspberry Pi Zoom Box
I have been tinkering with Raspberry Pis for over 5 years now and these credit-card sized computers have formed the backbone of a number of successful (and unsuccessful) projects, including a Dropbox-style file server with off-site backup to my father’s house, a remote solar power monitoring system and playing Steam PC games on a TV in another room. My original idea was to control a Raspberry Pi with a webcam remotely to attend a Zoom without Wi-Fi access. This solution would have been far simpler to build with a portable LTE modem, but this adds a step to the setup process and I wanted this to be as simple as possible to use. Instead, I used an LTE HAT (Hardware Attached on Top) for the Raspberry Pi. No input is required from the user beyond plugging it into a power outlet and changing the input source on the TV. The Raspberry Pi can then be unplugged when not in use. The way I went about actually making this happen was the simplest solution I could find in a limited amount of time with the constraints I had. I’m certain there is a more elegant solution as the communication between the modem and the Raspberry Pi is over USB rather than Serial which sort of defeats the purpose of the HAT form factor. It has worked extremely well in testing and I believe it’s a gentle way of introducing an array of Linux and maker concepts while providing you with a powerful final product that can serve as inspiration for your own projects in the future.
You will need:
Hardware
- A computer with an internet connection to install the required software, control the Raspberry Pi remotely and follow this article
- Raspberry Pi 4 with 4GB RAM, I also tested this on a Pi 2 and Pi 3, but they weren’t quite powerful enough to run the Zoom web client
- 8GB or larger high speed microSD card and an adaptor that will work with your computer (either microSD to USB, microSD to full size SD or a separate card reader)
- Micro HDMI to Standard HDMI cable for display and audio out
- Computer monitor and speakers with a 3.5mm jack or a TV with an HDMI port (If you have an older TV you may be able to find an HDMI adaptor for the ports you do have)
- Official Raspberry Pi USB-C power supply
- SIM card from a mobile carrier. I chose a 12GB for $20 per month plan from Dodo
- Waveshare SIM7600 4G HAT — take note of the bands your mobile carrier uses. I ended up using the G-H model
- Antenna for the HAT — this should come with the HAT
- MicroUSB to USB cable for the HAT — this should come with the HAT
- USB mouse
- USB webcam with built-in microphone (or a separate USB microphone if it doesn’t have one built-in) — I used a Logitech C505 for its long USB cable and long range microphone but there are plenty of options available
- Access to Wi-Fi or a home router and an internet connection for initial setup
- (Optional but Recommended) A Raspberry Pi case compatible with HATs
- (Optional but Recommended) Ethernet cable
- (Optional) USB keyboard to enter your Wi-Fi password if you don’t have an ethernet cable
Software
- Raspberry Pi Imager
- RealVNC account and RealVNC Viewer
Steps
RealVNC
Virtual Network Computing (VNC) is a protocol similar Windows’ Remote Desktop that allows remote control of another computer’s Graphical User Interface. For this tutorial we will use software provided by RealVNC to control the Raspberry Pi remotely. RealVNC is free for non-commercial use for up to 5 computers. Go to realvnc.com and click Sign In in the top right corner of the page.
Add your email address, solve the CAPTCHA challenge and click Next.
Follow the sign-up process and verify your email. Once verified and logged in you can download RealVNC Viewer by clicking here. Select the correct version of RealVNC Viewer for your computer (not the Raspberry Pi) and click Download VNC Viewer.
Once downloaded, open the file and follow the installation steps. Once RealVNC Viewer is installed, open the program and log in with your RealVNC account credentials.
Raspberry Pi Imager
Next, we need to install Raspberry Pi Imager. This is a program that downloads the Operating System (OS) that runs on the Raspberry Pi and installs it on the microSD card. Navigate to raspberrypi.org/software and click on the Download button for your computer’s OS under the Install Raspberry Pi OS using Raspberry Pi Imager heading. Download the file, run it and follow the installation instructions.
Flash OS Image
Plug the microSD card into your computer using the adaptor and launch Raspberry Pi Imager. Click on Choose OS and select Raspberry Pi OS (32 bit).
Click Choose Storage and select the microSD card. It is very important you make sure you have selected the microSD card because any data on the storage device you choose will be overwritten. Click Write and do a final check you have selected the correct storage device before clicking Yes. Enter your password if prompted.
Raspberry Pi Imager will then download the OS image, write it to the microSD card and then verify it was written successfully. This may take a while depending on your internet connection. When it is complete, click Continue and remove the microSD card.
First Boot
Insert the microSD card into the port on the bottom of the Raspberry Pi. Attach your mouse, microHDMI to HDMI cable and either a keyboard or an ethernet cable connected to your home router or network switch. Plug the other end of the HDMI cable into an available port on your TV or computer monitor, or use an adaptor if you have an older device without HDMI ports. Turn on your TV or monitor and change the input source to the port the Raspberry Pi HDMI cable is plugged into. Once everything is connected, plug the power brick into the wall and the USB-C plug into the Pi. The Raspberry Pi will now initialise and boot.
Once the Pi has fully booted you will be presented with the desktop and the First Time Setup Wizard.
Click Next and follow the Wizard. The first step is to set your locale. When prompted to set a new password click Next without making any changes. Change the display settings as needed. If you chose to connect to the internet via ethernet you can click Skip when asked to join a Wi-Fi network, otherwise find your desired Wi-Fi network, enter the password and connect. On the Update Software page click Next to install any available updates. This process can take several minutes and may look frozen at times.
Click OK once the updates are installed. You will be prompted to restart but don’t do this just yet. Click on the raspberry icon in the top left to open the menu, then hover over Preferences and click Raspberry Pi Configuration.
Go to the Interfaces tab and enable VNC. Click OK.
Next, hover over the network interfaces icon in top right and make note of the IP address that appears, ignoring any numbers after the slash. This will either be two opposing arrows if connected to ethernet, or a Wi-Fi icon if connected to Wi-Fi.
Return to the Setup Wizard and click Restart. If you closed the Setup Wizard earlier you can restart by opening the menu, clicking Shutdown… and then clicking Reboot. From here you no longer need the keyboard and mouse attached to the Raspberry Pi. My Raspberry Pi got stuck here and didn’t reboot on a couple of occasions when testing this tutorial. If this happens, gently unplug the USB-C power cable and plug it back in. The system should now reboot.
VNC
Once back on the Raspberry Pi desktop open RealVNC on your computer and type the IP address from earlier into the address bar at the top, followed by Enter.
If you encounter an error the IP address may have changed, particularly if your Pi is connected via Wi-Fi. If this happens just plug the mouse in again and hover over the network interfaces icon and make note of the new IP address.
If you receive an Identity Check popup you can click Continue. You will then be prompted for the Raspberry Pi username and password. The default username is “pi” and the password is “raspberry”. Ensure the Remember Password checkbox is unchecked and click OK.
You should now see the Raspberry Pi desktop. Now that we are logged in we will change the password. Go back into the Raspberry Pi Configuration under Preferences in the menu and click Change Password… on the System tab and create and confirm a new password. Click OK to confirm. You can also change the hostname of the Raspberry Pi to something more memorable from this screen if you would like. Click OK again to close the configuration window.
In the top right click on the blue and black RealVNC logo.
Click on the Sign in to enable cloud connectivity link on the left under Connectivity.
Enter your RealVNC credentials, click Sign in and add the Raspberry Pi to your team, give it a helpful name and click Apply. If prompted, select Home Subscription. Once confirmed, click Apply and then click Done.
From now on you can reconnect to the Pi from the Teams tab in VNC Viewer. If you are in windowed mode, you can close it as you would normally close a window. If you are in fullscreen mode hover over the top centre of the screen and click on the X to disconnect from the Raspberry Pi and click Yes when prompted.
The Raspberry Pi should now appear on the Team tab and you can connect to it here by double clicking. You will now be able to connect to the Raspberry Pi even if the IP address changes. It may take a few moments to appear. If you think it is taking a little too long you can close and re-open VNC Viewer.
Once you have double clicked the icon and entered “pi” and your new password you should be returned to the Raspberry Pi desktop.
Setting up the HAT
Shut down the Pi from the menu and unplug the USB-C power cable. Insert the SIM into the slot on the back of the HAT and then connect the LTE antenna to the HAT using the Main port. Plug the HAT into the GPIO header (huge row of pins) on the top of the Raspberry Pi and connect a microUSB to USB-A cable from the microUSB port labelled USB to a USB port on the Pi. Make sure you don’t use the UART over USB port. Plug the power cable back in.
The Linux Terminal
This terrifying concept may well be the reason most people avoid Linux altogether. With many modern Linux distros you don’t need to use it for most everyday tasks (evidenced by the fact that I haven’t introduced the concept until this point in the article). Its usefulness comes from being able to access settings not available in the graphical user interface or to achieve certain tasks more quickly or even automatically, such as writing scripts. When you stick to a basic set of rules and do your best to understand what you are doing it can be surprisingly difficult to irreversibly break things. Tutorials like this are a perfect opportunity to break things with extremely low stakes. If it becomes unsalvageable you can just shut down the Pi, reflash the OS image to the microSD card and try again without worrying about having lost anything important.
You will notice the word sudo
used a number of times. sudo
is required as Linux requires superuser (think Administrator) privileges in order to make changes to the system. sudo
is a way to give these privileges to approved users (including the "pi" user in this case) as required without having to log in specifically as a user with these privileges (such as the "root" user). It is generally considered a security risk to log in directly as the root user.
The Linux terminal is accessed from the Graphical User Interface (GUI) through a program called a terminal emulator. The Linux terminal is a text-based user interface that accepts keyboard inputs and is distinct from the GUI. A terminal emulator provides access to the terminal from within the GUI. You can access the terminal emulator on the Raspberry Pi by clicking on the grey rectangle icon with the characters >_ on the taskbar.
Setting up Networking
Minicom is a text-based application for communicating with modems. Install Minicom by opening the terminal emulator and typing sudo apt install minicom
and pressing Enter. APT is a package manager included with many different Linux distros that allows you to relatively easily install software designed to run on your operating system. It installs this software from approved sources, called repositories or "repos". Raspberry Pi OS is a Linux distro based on another Linux distro called Debian. It is specifically compiled to run on the Raspberry Pi as the processor in the Pi understands different instructions to the processor in your computer which is different again to your phone (unless you have a new Mac - these have the same instruction set as iPhones and iPads). When prompted press y and Enter.
While you are welcome to type out every command listed in this tutorial this will become very tedious and can lead to errors if commands aren't typed perfectly. RealVNC allows you to copy text from one computer and paste it to the other. You can copy the terminal commands in this tutorial by highlighting them and pressing Ctrl + C on PC (command + C on a Mac), clicking on the terminal emulator window on the Raspberry Pi and pressing Ctrl + Shift + V (command + shift + V) to paste it. Press Enter to execute the pasted command. The remainder of this tutorial uses PC keyboard shortcuts. If you are using a Mac, please modify them accordingly. If you need to re-run a command you used previously, you can scroll through previous commands with the up arrow, pressing Enter on the command you want to execute.
When Minicom has successfully installed the terminal will print pi@raspberrypi in green to indicate it is ready for your next command. If you changed your hostname to something else it will say pi@yourhostname.
Let’s open Minicom and communicate with the HAT via USB with the command minicom -D /dev/ttyUSB2
. Once Minicom successfully opens, send the following command to the HAT: AT+CUSBPIDSWITCH=9001,1,1
. This resets the HAT with the settings we need. This should return OK. To exit Minicom use Ctrl + A, followed by X and Enter.
Operating Systems are built around a kernel; a piece of software that is responsible for communication between the operating system and the physical computer hardware. Device drivers provide a software interface for hardware so that the hardware can be used by software. Kernel modules are a way to make kernel-level changes such as activating or deactivating device drivers without having to recompile the kernel or reboot the system. Raspberry Pi OS comes with a networking kernel driver from Qualcomm. This will cause problems later so we will ensure it is not loaded it with sudo rmmod qmi_wwan
. Due to the nature of kernel modules this isn't persistent on reboot. We can very easily add this kernel module to a blacklist so it doesn't reload when we reboot but it is just as easy to add this step to the script we create later.
In order to download the driver we will actually use we first need to install 7-Zip, a file compression and extraction tool. Files can be compressed using an algorithm so they take up less space which can be useful when transferring files. We will need this to extract the driver once we download it. We can install 7-Zip with sudo apt install p7zip-full -y
. The -y flag at the end of the command means that if APT asks us any questions it will assume the answer is yes without waiting for us to respond.
Then we will do the same with some additional kernel headers for the Raspberry Pi with sudo apt install raspberrypi-kernel-headers
. This may take a little while. Now we will download the driver archive using the utility wget: wget https://www.waveshare.com/w/upload/0/00/SIM7600_NDIS.7z
. wget provides us with a way to download files from a URL from the terminal. Let’s unzip this archive and add all of the contents to the folder SIM7600_NDIS in our user directory: 7z x SIM7600_NDIS.7z -r -o./SIM7600_NDIS
.
Let’s open this new folder: cd SIM7600_NDIS
. cd (change directory) is a command we can use to navigate between folders from the terminal. Next, we will compile the contents of this folder into a usable kernel module for our Pi. Remove any previous attempts to compile with sudo make clean
and then let's compile with sudo make
. Some warnings may be displayed while the driver is being compiled however this should be fine provided there aren't any errors that cause the process to fail.
Let’s list the files in this directory and make sure simcom_wwan.ko is there with ls
.
Now let’s install this kernel module so we can use it: sudo insmod simcom_wwan.ko
. Let's make sure this was successful by checking simcom_wwan appears on the kernel module list with lsmod
. You may need to scroll up to find it.
The wwan0 network interface should now be recognised by your Raspberry Pi. We can check this now by listing the available network interfaces with the command ifconfig -a
.
If it appears we can enable it with sudo ifconfig wwan0 up
.
Now we need to dial out from our HAT. Open Minicom with minicom -D /dev/ttyUSB2
and send AT$QCRMCALL=1,1
to the modem. This is successful if Minicom prints OK. Exit with Ctrl + A, X and Enter. Finally, we need to assign an IP address to the Pi which we can do with a program called udhcpc. Install it with sudo apt install udhcpc
and assign an IP address with sudo udhcpc -i wwan0
. This command is successful when udhcpc returns a message saying it has obtained a lease for an ip address. If it repeatedly prints the messaging “sending discover”, something has gone wrong. Cancel the command with Ctrl + C, reboot with sudo reboot
and try again from the step where we sent the first command to the HAT using Minicom.
Let’s test it by seeing if we get a response from Google using the wwan0 interface: ping -I wwan0 www.google.com
. We should be receiving packet information in addition to our pings if it is working. Exit with Ctrl + C when you are satisfied this is working. You will then see a summary message showing the number of successful packets sent and received.
It’s time for the moment of truth! Make sure you are connected to the Pi from your team on RealVNC rather than the IP address we first used. Disconnect the ethernet cable or turn off the Wi-Fi by clicking on the icon in the top right and clicking Turn Off Wi-Fi.
If everything works it may disconnect for a minute but then reconnect. If you’re concerned something has gone wrong you can close the VNC session and reconnect from the Team tab. If this doesn’t work after a couple of attempts you can connect a mouse to re-enable Wi-Fi or plug in an ethernet cable and reconnect to troubleshoot. If everything worked we’re now connected using the 4G HAT!
Create a Script
This was great but if we reboot the Pi we have to do it all again. Let’s write a script to automate this. Navigate back to the home directory with cd
. If you use the cd command without specifying a directory path it will take you to the current user's home directory. In this case it is /home/pi
. Create a new file called atscript and open it in nano with nano atscript
. nano is a text editor that runs inside the terminal. There are several other command line text editors available however I find nano to be the most intuitive. This file will be read by Minicom which will send commands to our HAT. The first line is the same as the previous AT command we used but with a send command added: send AT$QCRMCALL=1,1
. This leaves us with the problem of how to exit Minicom as we still have to exit manually. A very simple but inelegant solution is to kill the Minicom process once the first line has run by adding this on the second line: ! killall -9 minicom
. Press Ctrl + O and Enter to create this new script and Ctrl + X to exit nano.
Create a new file called startup-script.sh and open it in nano with nano startup-script.sh
. The first line will contain our shebang. This line tells the OS how to interpret our script. Purely out of habit I will use the bash interpreter.
#!/bin/bash
The first thing we did when installing the driver was remove the qmi_wwan kernel module. Let’s automate this:
rmmod qmi_wwan
Now we can add our new kernel module. We don’t need to download, unzip and compile it again but as we are not in the SIM7600_NDIS directory we need to provide the full path to simcom_wwan.ko.
insmod /home/pi/SIM7600_NDIS/simcom_wwan.ko
Next we open the wwan0 connection:
ifconfig wwan0 up
Then we need to tell Minicom to read the atscript file we just created and send the commands to our HAT:
minicom -D /dev/ttyUSB2 -S /home/pi/atscript
Now we need to assign an IP address:
udhcpc -i wwan0
Note we’re not using sudo here as our entire script will be run with sudo so it’s not necessary to specify it on each line.
Press Ctrl + O followed by Enter to save and Ctrl + X to exit nano.
Finally, we need to make this script executable so that it can be run by the operating system. We do this by changing the permissions of the file with chmod +x startup-script.sh
. Make sure you turn Wi-Fi back on or plug the ethernet cable back in. Reboot the Pi with sudo reboot
.
Once rebooted it is time to test the script. Open the terminal emulator and type sudo ./startup-script.sh
.
Check that wwan0 was successfully detected by the operating system with ifconfig -a
. If this worked, ping Google again using this the wwan0 interface: ping -I wwan0 www.google.com
. If this is successful it all works! Now we need to disconnect from Wi-Fi or ethernet and check that VNC Viewer reconnects. On a couple of occasions while I was testing this tutorial the script got stuck waiting for an IP address to be assigned. If this happens to you, add sleep 10
after the insmod command, after you bring wwan0 up and after calling Minicom to send commands to the modem. While scripts typically wait to execute the next line once the previous line has received some kind of response sleep
artificially forces the script to wait a little longer and this appeared to work for me.
Run on Startup
There are a number of ways to run a script when the Raspberry Pi starts. We will focus on one of the most brutally simple and reliable. Let’s open rc.local: sudo nano /etc/rc.local
. Scroll down and add the following line on the second last line above exit 0: /home/pi/startup-script.sh
. There shouldn’t be any text below exit 0.
Press Ctrl + O followed by Enter to save and Ctrl + X to exit nano. Make sure rc.local is executable with sudo chmod +x /etc/rc.local
.
You should already have turned off the Wi-Fi or disconnected the ethernet. Try rebooting the Pi with sudo reboot
. The Raspberry Pi should now reboot and automatically reconnect using the LTE connection. If this fails, plug in the ethernet cable or a mouse to reconnect the Wi-Fi and troubleshoot.
Zoom
Before we get started with Zoom, we need to make sure the GL driver is enabled. OpenGL is an application interface for 2D and 3D graphics. We’re going to check this by using the terminal version of the Raspberry Pi Configuration tool. Open the terminal emulator and type sudo raspi-config
followed by Enter. Use the arrow keys to highlight Advanced Options and press Enter.
Select GL Driver and then select GL (Fake KMS). Press Enter to confirm, use the arrow keys to highlight Finish and press Enter. Highlight Yes and press Enter if you are prompted to reboot.
Now let’s plug the webcam into one of the USB ports on the Raspberry Pi and clip it to your TV or monitor. If your webcam has a built-in microphone you need to make sure it is set as the audio input, otherwise if you are using a USB microphone you will need to plug it in now and set it as the input source. Do the same with the outputs, by selecting HDMI for either your TV or monitor with integrated speakers or the audio jack on the Raspberry Pi if you are using separate speakers. You can check these by right clicking on the audio icon in the top right. The selected inputs and outputs will have a green tick displayed next to them. Left click brings up the volume control.
This tutorial assumes you are familiar with Zoom, the now-ubiquitous video conferencing platform that rose to prominence during the COVID-19 pandemic. There are a huge number of guides online if you are not familiar with it. Log into Zoom on your main device and create a new meeting or use your personal meeting ID, making note of the meeting ID and password. Start by clicking on the blue globe icon next to the raspberry icon on the desktop of the Raspberry Pi.
This opens Chromium — the open source browser that forms the basis of Google Chrome. Navigate to zoom.us/join and enter the meeting ID and click Join or copy the meeting link from your computer and paste it in the browser address bar. Click on the ^ icon next to the X in the top right of the window to maximise the browser.
Click Join from Your Browser towards the bottom of the page.
When prompted by Chromium, click Allow to allow Zoom to access the microphone and camera.
Enter a helpful name for testing and check the microphone and camera are working. The microphone icon should fill with green depending on the sound input level. Try talking and check that the microphone icon responds. When you are satisfied, click Join and enter the password for the room if prompted. Once in the room click on Join Audio by Computer. If this is greyed out, try refreshing the page and trying again. Test that the audio and video work on both your computer and the Raspberry Pi. Make sure you evaluate the performance on the Pi using the attached monitor and speakers rather than through VNC Viewer. The VNC connection redraws the screen from top to bottom and adds additional latency, making the video appear choppier than it really is. I recommend not testing both devices in the same room in order to avoid bad echo, particularly if the microphone you are using can pick up sounds from a distance. The meeting quality on the Raspberry Pi won’t be perfect but it should be usable. If you are having issues with the quality you can try moving the LTE antenna or the entire setup somewhere with better reception. You can also try ending the VNC session to see if this improves the meeting quality. Once you are satisfied with the meeting quality you can end/leave the meeting and sign in or sign up for a new account for future meetings as needed. It’s possible to run Chromium in kiosk mode on boot, meaning it automatically launches on startup and opens Zoom. This is very straightforward, but I found that it mostly just got in my way during testing and it was easier for my partner to navigate if she had to manually open Chromium.
Keeping the Pi Updated
The software repositories for the Raspberry Pi are constantly being updated as the installed software gets new features or bugs and security issues are found and fixed. The first step to updating your Raspberry Pi is by updating the index of this software and the latest changes stored on the Raspberry Pi itself. We can do this by opening the terminal emulator and using the command sudo apt update
. Once the repos have been checked for any changes we can update the installed software and operating system components with sudo apt dist-upgrade
. This command also installs any software that other installed software packages require to function properly (called dependencies), removes any software no longer required and does some additional intelligent management of updates. You can run this when it suits you to keep the Raspberry Pi updated and secure, but we can also schedule it using a program called cron. Let's update it every Monday at 5pm. Type sudo crontab -e
in the terminal emulator to open the configuration file for cron. If prompted, type the number that corresponds to opening the file in nano. The configuration file is a very good place to start for understanding how cron works and I recommend reading through it. When you're ready, scroll all the way to the bottom of the file and add the line 0 19 * * 1 apt update && apt dist-upgrade -y
. The line above this should be # m h dom mon dow command
. We have followed the same format on the line we added. At 0 minutes of hour 19 (7pm), any day ( * ) of any month ( * ), on the first day of the week (Monday), run apt update and apt dist-upgrade. The -y flag means APT should assume we want to answer yes to any prompts as it will be running automatically. Save your changes with Ctrl + X and Enter and exit nano with Ctrl + O. You can change this update schedule to a time that suits your needs and when the Raspberry Pi is likely to be turned on. crontab.tech has plenty of helpful examples and is an excellent resource for helping you to create cron jobs.
Congratulations
You made it! You now own a very small and powerful computer you can put anywhere there is LTE coverage and access it remotely. You can use this to help your family and friends stay connected or as the jumping off point for your own projects. For video conferencing this solution isn’t limited to just Zoom. It should work with any messaging platform with an option to join meetings from a browser. Examples include Facebook Messenger, Google Meet and Jitsi Meet. Thank you for reading and please feel free to contact me on Twitter if you have any comments or questions!