Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
https://magazine.odroid.com/issue/print?issue=201904 1/66
5/2/2019 Print | ODROID Magazine
https://magazine.odroid.com/issue/print?issue=201904 2/66
5/2/2019 Print | ODROID Magazine
https://magazine.odroid.com/issue/print?issue=201904 3/66
5/2/2019 Print | ODROID Magazine
PiHole
April 1, 2019
CarPC
April 1, 2019
https://forum.odroid.com/viewtopic.php?f=55&t=33941
In this article, I’d like to introduce you to my CarPC
project. This project is built from four main parts: A
custom display based on a 2 DIN Android head unit case ODROID-XU4Q ZTE
Blade for 3G modem and GPS tracking when the car is shut o LG LAC5900RN
https://magazine.odroid.com/issue/print?issue=201904 4/66
5/2/2019 Print | ODROID Magazine
https://magazine.odroid.com/issue/print?issue=201904 5/66
5/2/2019 Print | ODROID Magazine
https://magazine.odroid.com/issue/print?issue=201904 6/66
5/2/2019 Print | ODROID Magazine
install all the latest updates which Raid status and temperature. It has
includes a kernel update from 4.9 to two temperature triggers, one which
4.14 via the admin interface. to switch the CloudShell2 o and send
an email noti cation to the user if a
https://goo.gl/YzaeMy
certain temperature is reached for a
certain time (default 85°C for 15
seconds). The second one regulates
the case fan of the CloudShell2, by
default it will switch the fan on if the
Figure 2 – OpenMediaVault
XU4 reaches a temperature >65°C and
https://goo.gl/ti7v3U o if a temperature <60°C (65-5) is
Illustration held for a period of 5 minutes. All
relevant scripts for sending mail and
The main focus was to provide a view startup are installed in /usr/local/bin
in which information can be easily
$ raid_mailsend
read by using a larger font like those
$ start‑lcd
used by other tools.
$ temperature_shutdown
The RAID Status, current time, up time,
average usage, current IP address and Within the admin interface of
free space are just some of the OpenMediaVault (OMV) you have to
information you can get. On the enable mail noti cation. In case of
bottom you have four icons; from the HW/RAID errors, they are reported
left they are: along with everything else that is
problematic or, alternatively, just
Ethernet cable connection status information on the system will be
Recognised Ethernet connection reported. [caption
speed id="attachment_11863"
Fan ON/OFF status align="alignnone" width="790"]
HDMI cable connection status
https://magazine.odroid.com/issue/print?issue=201904 7/66
5/2/2019 Print | ODROID Magazine
$ wget
http://www.areascout.at/cloudshell2
Figure 3 – CloudShell2 ‑monitoring_1.0.7‑2_armhf.deb
$ sudo dpkg ‑i cloudshell2‑
Illustration[/caption]
monitoring_1.0.7‑2_armhf.deb
XU4 and XU4Q are di erent from here
what values could be used, on an XU4 Have fun with a new display look!
(without SoC fan) it could be that you You can now continue to setup the
are better by setting up the fan to be RAID controller with the DIP switches
always on, but the default values on front of your CloudShell2. After
should be good enough for average that you have to mount the newly
daily work. created hard disk RAID set within the
Installation admin interface of OMV.
https://magazine.odroid.com/issue/print?issue=201904 8/66
5/2/2019 Print | ODROID Magazine
FAN_OFF_HYSTERESIS : Time, in
or a reboot could be needed
seconds, when FAN_ON_TEMP minus
5°C has to be reached to switch the The tool also has a new command line
fan o again ( default option -i which you can invoke to get
FAN_OFF_HYSTERESIS=300 ). more information about your raid
controller and disks connected; you
CS_HDD_MOUNTP : Unique
can execute it at any time, even if the
mountpoint or device path to display
tool is already running:
the hard disk space, i.e if you are using
an complex LVM con g. $ CloudShell2_lcd ‑i
https://magazine.odroid.com/issue/print?issue=201904 9/66
5/2/2019 Print | ODROID Magazine
Reference https://forum.odroid.com/viewtopic.
php?f=147&t=33860
https://magazine.odroid.com/issue/print?issue=201904 10/66
5/2/2019 Print | ODROID Magazine
le on the user’s BitTorrent client. But BitTorrent itself has taken on an aura
BitTorrent has been given a bad rap: of being illicit to users who do not
because it is a wonderful technology understand how it works.
for distributing large les, it didn’t take When you download a le with
long for software and video pirates to BitTorrent, such as a Linux distro IMG
begin using it for the illegal or ISO, you can choose to leave it in
distribution of copyrighted material.
your BitTorrent server. This makes
Mainstream media tends to misreport your copy of the le a “seed,” which
on technology: the Internet just turned means other people can download
30 years old* by the way. chunks of the le from you with their
Misconception stems from a own BitTorrent client for as long as
misrepresentation of technology when you decide to seed the le. A le with
people who don’t really understand it many seeds will download very quickly
are the ones explaining it. Think of the and distribute the bandwidth usage
way Bitcoin or Blockchain are handled across the network. It’s a subtle, but
by network newscasts, or perhaps meaningful way to anonymously give
how Kodi has been blacklisted on back to a beloved Linux distribution
some devices as a result of poor because you are in essence donating
wording in journalism. In the eyes of download bandwidth to future
the well-meaning readers and viewers, downloaders. Ubuntu is o cially
Bitcoin becomes a tool of ransomware available via BitTorrent, as are many
attackers, the Blockchain; a other Linux distros including my own
mysterious digital realm where project, NEMS Linux. BitTorrent is
hackers of the future will do their bene cial all around: For me as the
bidding. Kodi is seen as an illegal downloader wanting to get my IMG
streaming video platform and les quickly, and to the next user
BitTorrent is where you’ll nd illegal wanting to do the same. BitTorrent
downloads. These wonderful tools get reduces the cost of distribution to the
painted in a bad light making the distro developer and gives me a small
average person afraid to use them. So way to “give back” by providing a seed.
https://magazine.odroid.com/issue/print?issue=201904 12/66
5/2/2019 Print | ODROID Magazine
It also ensures optimal uptime for spinning drive you can opt for the
downloads since if one seed goes ODROID-HC2, and follow the same
o ine, the others will pick up the slack directions below. Choose which model
seamlessly. you’d like to go with based on the type
of storage you’ll be using.
While you may install a BitTorrent
client such as Transmission or Deluge What you’ll need:
on your computer, in order to remain
ODROID-HC1
seeding torrents you would need to
keep that software running at all Appropriate power Supply (e.g., 5V
4A barrel plug for HC1)
times. If you’re like me, you’d prefer a
Case for ODROID-HC1
dedicated solution; something that
MicroSD Card for Operating System
doesn’t use a lot of electricity, but has
and Software
the storage space and power to do a
2.5” SSD Drive for Torrent Storage
great job of downloading and seeding
Optional: RTC Battery
torrents 24/7 without having to leave
anything running on the computer.
This is where the ODROID-HC1 or
ODROID-HC2 come in. These two
o erings from Hardkernel are
essentially an ODROID-XU4 SOC built
into a nice home NAS box. You can
think of them like a Linux-powered 8-
core dedicated computer with 2 GB Figure 1 – My ODROID-HC1 BitTorrent
RAM and a single hard drive. There’s Seed Server with a 960GB Kingston SSD
no video output, so it’s ideal for an
Step 1: Download my Debian Buster
always-on headless Debian server.
base image and ash it to your
Personally, I’ll be using an ODROID-
MicroSD card. You’ll nd this at
HC1 because I want to use a SSD and
https://baldnerd.com/sbc-build-base/
make this tiny server entirely solid-
state. If you’d prefer to use a 3.5”
https://magazine.odroid.com/issue/print?issue=201904 13/66
5/2/2019 Print | ODROID Magazine
Step 2: Install your SSD into the HC1 the drive rst so it is just one partition
chassis and add the case. Insert the using the whole drive. To do this, type
MicroSD card and Ethernet cable and the following commands to remove
boot it up. the existing partition(s) and create a
new one, keeping in mind this will
Step 3: Find the IP address of your
device by checking your network’s wipe the drive contents, so if this is
DHCP pool. SSH to it using the default not a new drive, please backup your
errors=remount‑ro,noatime,discard 0
useradd ‑m robbie
1
usermod ‑aG sudo robbie
Press CTRL‑O, [Enter] to save.
passwd robbie
Press CTRL‑X to exit.
Step 8: Create a folder where we’ll
Step 11: Test to make sure the SSD
mount the SSD within that user’s
drive mounts successfully:
home folder and make it immutable.
I’ll call it “ssd”: mkdir mount ‑a [enter]
/home/robbie/ssd && chattr +i mount | grep sda1 [enter]
/home/robbie/ssd
If the drive has successfully mounted,
Step 9: You could have noted this in you should see something like this:
Step 6 after formatting the partition,
root@debian‑stretch:~# mount | grep
but for good measure we’ll nd the
sda1
UUID with this command: blkid
/dev/sda1 on /home/robbie/ssd type
/dev/sda1
ext3
(rw,noatime,discard,errors=remount‑
ro,stripe=8191,data=ordered)
Figure 3 – Prepare your mountpoint and
nd your UUID
D)
Figure 4 – Ensure your drive mounts to
Step 10: Make the SSD automatically your new mount point
https://magazine.odroid.com/issue/print?issue=201904 15/66
5/2/2019 Print | ODROID Magazine
mkdir /home/robbie/ssd/torrents
chown ‑R debian‑
transmission:debian‑transmission
/home/robbie/ssd/torrents/
Step 15: Modify the con guration le. That’s it! We’re up and running. If all
went well, you’ll be able to open the
Open the config file for editing:
nano /etc/transmission‑
web interface by visiting http://ip:9091
daemon/settings.json from your computer, where ip is the
Change the value of download‑dir to actual IP of your new BitTorrent
/home/robbie/ssd/torrents server. The default web interface
Since our BitTorrent server will be username is transmission, and the
accessible on our LAN only (not
password is also transmission. You
opening it up for remote access),
can change this by stopping the
we can turn off IP whitelisting.
Change rpc‑whitelist‑enabled to
daemon as you did in Step 14, editing
false the values within the con g le before
Save your config by pressing CTRL‑O restarting the daemon.
[Enter], followed by CTRL‑X to
exit.
https://magazine.odroid.com/issue/print?issue=201904 16/66
5/2/2019 Print | ODROID Magazine
https://magazine.odroid.com/issue/print?issue=201904 18/66
5/2/2019 Print | ODROID Magazine
https://goo.gl/PgYF6C ‑z 5 ‑left ‑0.489 ‑botton 51.28 ‑
right 0.236 ‑top 51.686
The key menu is as follows:
Where the following options can be
JoyPad = Move around
speci ed:
A/B = Zoom in/out (Zoom Level goes
from 5-16, depending on which tile -URL : TileServer
zoom levels you have) -z : Zoom level
Select / Start = Brightness
Menu = Reset Movement and the bounding box limits are:
The o ine maps can also be stored on 6. Now you will nd some PNG les
an SDCard as seen here: in the Maperitive /tiles folder
8. Open Flexxi.exe
(https://sourceforge.net/projects/ e
xxi-image-resizer/)
9. Import the Tiles Folder
10. Resize the Image to 240×240 px
(best Fit for GO Screen)
Figure 2 – ODROID-GO with o ine OSM
Map GPS Youtube video 11. Convert to JPG Files
12. Save
It uses a Zoom Level from 5 to 14, with
13. Now you have your tiles in the
the Position marker as the red circle.
correct size and format
This “scroll around” is a manipulation 14. Copy the “TILES” (all Uppercase)
of the GPS Coordinates via the folder to the root directory of your
JoyStick. Following are the steps to SD card
generate tiles (o ine Map) for your
area: Open Arduino IDE and Flash the Code
to your GO. This is the Arduino Code:
1. Open Maperitive.exe
#include
(http://maperitive.net/)
2. Move the map to your favorite
#define DISPLAY_WIDTH 320
position
#define DISPLAY_HEIGHT 240
3. MAP->Set Geometry Bounds
#define TILE_SIZE 240
4. MAP->Set Printing Bounds
bool firstRun = true;
Now the area of the map you want to double zoom = 10;
Export is set. double lat_rad = 50.8225313,
lon_deg = 12.7508936;
5. TOOLS-> Generate Tiles (this can double tileX = 0, tileY = 0;
take some time, depending on the double old_lat_rad = 0, old_lon_deg
resolution of the Zoom Level) = 0;
double old_zoom = 0;
https://magazine.odroid.com/issue/print?issue=201904 21/66
5/2/2019 Print | ODROID Magazine
double old_tileY = 0, old_tileX = } else if (cardType == CARD_SD) {
0; GO.lcd.println("SDSC");
uint8_t brightness = 127; Serial.println("SDSC");
} else if (cardType == CARD_SDHC)
void setup() {
{ GO.lcd.println("SDHC");
// put your setup code here, to Serial.println("SDHC");
run once: } else {
Serial.begin(115200); GO.lcd.println("UNKNOWN");
GO.begin(); Serial.println("UNKNOWN");
GO.battery.setProtection(true); }
GO.lcd.clear();
GO.lcd.setCursor(0, 0); uint64_t cardSize = SD.cardSize()
/ (1024 * 1024);
if (!SD.begin()) { Serial.printf("SD Card Size:
GO.lcd.println("Card Mount %lluMB
Failed"); ", cardSize);
Serial.println("Card Mount GO.lcd.printf("SD Card Size:
Failed"); %lluMB
return; ", cardSize);
}
uint8_t cardType = SD.cardType(); delay(3000);
if (cardType == CARD_NONE) { GO.lcd.clear();
GO.lcd.println("No SD card GO.lcd.setCursor(0, 0);
attached"); }
Serial.println("No SD card
attached"); //setBrightness(uint8_t
return; brightness),
} void loop()
{
Serial.print("SD Card Type: "); GO.update();
if (cardType == CARD_MMC) { if (GO.JOY_X.isAxisPressed() ==
GO.lcd.println("MMC"); 1) {
Serial.println("MMC"); lon_deg += 0.0001;
https://magazine.odroid.com/issue/print?issue=201904 22/66
5/2/2019 Print | ODROID Magazine
delay(10);
} if (lat_rad > 85.05112878)
if (GO.JOY_X.isAxisPressed() == lat_rad = 85.05112878;
2) { if (lat_rad < ‑85.05112878)
lon_deg ‑= 0.0001; lat_rad = ‑85.05112878; if (lon_deg
delay(10); > 180)
} lon_deg = 180;
if (GO.JOY_Y.isAxisPressed() == if (lon_deg < ‑180) lon_deg =
2) { ‑180; if (zoom > 16)
lat_rad += 0.0001; zoom = 16;
delay(10); if (zoom < 5) zoom = 5; if
} (brightness > 254)
if (GO.JOY_Y.isAxisPressed() == brightness = 254;
1) { if (brightness < 1)
lat_rad ‑= 0.0001; brightness = 1;
delay(10);
} //redraw only when something has
if (GO.BtnA.wasPressed() == 1) { changed
zoom++; if (old_lat_rad != lat_rad ||
} old_lon_deg != lon_deg || old_zoom
if (GO.BtnB.wasPressed() == 1) { != zoom || firstRun) {
zoom‑‑; double posX, posY, fractpart,
} intpart;
if (GO.BtnSelect.isPressed() == //calculate from coordinates to
1) { tile numbers
tileX = long2tilex(lon_deg,
GO.lcd.setBrightness(brightness); zoom);
brightness‑‑; tileY = lat2tiley(lat_rad,
} zoom);
if (GO.BtnStart.isPressed() == 1) //fractional part is the
{ position of the your coordinats in
the tile
GO.lcd.setBrightness(brightness); posX = modf(tileX , &intpart);
brightness++; posY = modf(tileY , &intpart);
} posX = (posX * TILE_SIZE) +
https://magazine.odroid.com/issue/print?issue=201904 23/66
5/2/2019 Print | ODROID Magazine
(abs(DISPLAY_WIDTH ‑ TILE_SIZE)); }
posY = (posY * TILE_SIZE); firstRun = false;
}
//redraw only when something
has changed GO.lcd.drawRect(int32_t(posX),
if (uint16_t(old_tileX) != int32_t(posY), 4, 4, RED);
uint16_t(tileX) || GO.lcd.fillRect(0, 0,
uint16_t(old_tileY) != abs(DISPLAY_WIDTH ‑ TILE_SIZE),
uint16_t(tileY) || old_zoom != DISPLAY_HEIGHT, BLACK);
zoom || firstRun) { GO.lcd.setCursor(0, 0);
String path = "/TILES/" + GO.lcd.println("Battery:");
String(uint16_t(zoom)) + "/" +
String(uint32_t(tileX)) + "/" + GO.lcd.println(String(GO.battery.ge
String(uint32_t(tileY)) + ".jpg"; tPercentage()) + "%");
Serial.println(path); GO.lcd.println("Lon_deg:");
if (SD.exists(path)) { GO.lcd.println(String(lon_deg,
Serial.println("File 6));
found."); GO.lcd.println("Lat_rad:");
GO.lcd.clear(); GO.lcd.println(String(lat_rad,
GO.lcd.setCursor(0, 0); 6));
//drawJpgFile(fs::FS &fs, GO.lcd.println("Zoom:");
const char *path, uint16_t x = 0, GO.lcd.println(String(zoom));
uint16_t y = 0, uint16_t maxWidth =
0, uint16_t maxHeight = 0, uint16_t Serial.println(String(tileX,
offX = 0, uint16_t offY = 0, 6));
jpeg_div_t scale = JPEG_DIV_NONE), Serial.println(String(tileY,
GO.lcd.drawJpgFile(SD, 6));
path.c_str(), (abs(DISPLAY_WIDTH ‑ Serial.println(String(posX));
TILE_SIZE))); Serial.println(String(posY));
} else { Serial.println(zoom);
GO.lcd.println(""); Serial.println(String(lon_deg,
GO.lcd.println("Debug: 6));
File not found."); Serial.println(String(lat_rad,
Serial.println("File not 6));
found.");
https://magazine.odroid.com/issue/print?issue=201904 24/66
5/2/2019 Print | ODROID Magazine
old_tileX = tileX;
old_tileY = tileY; double tilex2long(int x, int z)
} {
return x / pow(2.0, z) * 360.0 ‑
old_lat_rad = lat_rad; 180;
old_lon_deg = lon_deg; }
old_zoom = zoom;
} double tiley2lat(int y, int z)
{
double long2tilex(double lon, double n = M_PI ‑ 2.0 * M_PI * y
double z) / pow(2.0, z);
{ return 180.0 / M_PI * atan(0.5 *
return (double)((lon + 180.0) / (exp(n) ‑ exp(‑n)));
360.0 * pow(2.0, z)); }
}
Reference
double lat2tiley(double lat, double
z) https://forum.odroid.com/viewtopic.
{ php?f=162&t=33629
return (double)((1.0 ‑ log( https://youtu.be/-4kA_KhIvus
tan(lat * M_PI / 180.0) + 1.0 / https://github.com/ripper121/Odroid
cos(lat * M_PI / 180.0)) / M_PI) / GoOSMGPSO ine
2.0 * pow(2.0, z));
https://youtu.be/BQWwTZANGlE
}
https://magazine.odroid.com/issue/print?issue=201904 25/66
5/2/2019 Print | ODROID Magazine
This is a two part article that was client trying to boot to download the
adapted from the ODROID forum. The le named “pxelinux.0” from a speci c
rst half can be found at server. This le is part of the pxelinux
https://magazine.odroid.com/article/ package of boot loaders. So go ahead
how-to-create-a-backup-server- and install pxelinux on the same
using-clonezilla-and-pxe-part-1/. system you will be installing tftp-hpa
on. You can nd the Syslinux
PXElinux
homepage at
In both of the previous examples we https://www.syslinux.org/wiki/index.
have con gured DHCP to tell a PXE php … ux_Project and the pxelinux
https://magazine.odroid.com/issue/print?issue=201904 26/66
5/2/2019 Print | ODROID Magazine
https://magazine.odroid.com/issue/print?issue=201904 27/66
5/2/2019 Print | ODROID Magazine
place: # Menu Background image.png
# Prompt user for selection
$ sudo cp /path/to/clonezilla‑live‑ prompt 0
2.6.0‑37‑amd64.zip
/var/lib/tftpboot/cz/ #Global label identifier
$ cd /var/lib/tftpboot/cz/ label Clonezilla
$ sudo unzip ‑X *.zip # Set this entry as the
$ sudo cp default selection
/var/lib/tftpboot/cz/syslinux/*.c32 menu default
/var/lib/tftpboot # Actual viewable label
text
Then we create the PXE bootloader MENU LABEL Clonezilla
con g le. For this HOWTO it will be # The timeout for the entry
nothing fancy, or even very pretty. It is a bit unclear, but 100 should be
will just load what we tell it to after a equivalent to 10 Seconds.
TIMEOUT 100
10 second countdown:
TOTALTIMEOUT 100
$ cd /var/lib/tftpboot/pxelinux.cfg # The kernel image to load.
$ sudo nano default This entry would actually reside at
/var/lib/tftpboot/cz/live/vmlinuz
Place the following in the “default” #The path is relative to
con g le and don’t forget to change /var/lib/tftpboot or your tftp root
the IP address in the last line. As a side directory
kernel cz/live/vmlinuz
note, I found this template
# The initrd relative to
somewhere online a while back and I
the /var/lib/tftpboot directory and
don’t remember where or I would give
specifying the netboot server,
credit: protocol, and file
# In this example the tftp
# The default menu style ‑ using
protocol is used on server
vesa menu in this example
192.168.123.1. The file is
DEFAULT vesamenu.c32
filesystem.squashfs
# If you have a png image in the
append
tftpr directory you can specify it
initrd=cz/live/initrd.img boot=live
here like so:
username=user union=overlay config
https://magazine.odroid.com/issue/print?issue=201904 28/66
5/2/2019 Print | ODROID Magazine
https://magazine.odroid.com/issue/print?issue=201904 31/66
5/2/2019 Print | ODROID Magazine
Who would have guessed?! But, it’s Well, that’s interesting to know, but
there on page 1 of the Espressif ESP32 how can these dual cores be used on
WROVER Datasheet: “There are two the ODROID-GO? For example, how
CPU cores that can be individually can a program written in the Arduino
controlled, …” Integrated Development Environment
(IDE) take advantage of the ESP32 dual
And another dual core reference can
be found on page 7: “ESP32-D0WDQ6 cores?
contains two low-power Xtensa® 32-bit It’s remarkably easy to use the dual
LX6 microprocessors.” cores inside the ODROID-GO, but rst
https://magazine.odroid.com/issue/print?issue=201904 32/66
5/2/2019 Print | ODROID Magazine
https://magazine.odroid.com/issue/print?issue=201904 33/66
5/2/2019 Print | ODROID Magazine
will be }
// displayed on the Arduino
Serial Monitor // Create the core 0 task function;
which will run
Serial.begin(115200); // forever
// The native core used by the void task0Code( void *
Arduino is Core 1 pvParameters) {
// Use xPortGetCoreID() to Serial.print("This is Task0
confirm running in Core ");
// Label the core with
Serial.print("Setup() and Loop() xPortGetCoreID
run in Core "); Serial.println(xPortGetCoreID());
int x = 0;
Serial.println(xPortGetCoreID()); String xPreamble = "Core 0 ‑ ";
// You can create an infinite loop
// Define the function with for(;;)
xTaskCreatePinnedToCore() for(;;){
// for the core 0 task Serial.println(xPreamble + x);
x++;
xTaskCreatePinnedToCore( }
task0Code, // task function }
"Task0", // task name
10000, // stack size allotment void loop() {
in words // put your main code here, to
NULL, // task input parameter run repeatedly:
1, // task priority // This function will run in
&Task0, // task handle; as Core 1
instantiated above int y = 0;
0); // designate core String yPreamble = "Core 1 ‑ ";
for(;;) {
// A very short delay for Serial.println(yPreamble + y);
displaying the Task 0 y = y + 2;
// core information }
vTaskDelay(.25); }
https://magazine.odroid.com/issue/print?issue=201904 34/66
5/2/2019 Print | ODROID Magazine
https://magazine.odroid.com/issue/print?issue=201904 35/66
5/2/2019 Print | ODROID Magazine
https://magazine.odroid.com/issue/print?issue=201904 36/66
5/2/2019 Print | ODROID Magazine
This article describes how to install party, are integrated, allowing users to
Google Home on the ODROID-C2. listen to music, control playback of
Google Home is a brand of smart videos or photos, or receive news
speakers developed by Google. updates entirely by voice. Google
Google Home speakers enable users Home devices also have integrated
to speak voice commands to interact support for home automation, letting
with services through Google’s users control smart home appliances
personal assistant software called with their voice.
Google Assistant. A large number of
services, both in-house and third-
https://magazine.odroid.com/issue/print?issue=201904 37/66
5/2/2019 Print | ODROID Magazine
https://magazine.odroid.com/issue/print?issue=201904 38/66
5/2/2019 Print | ODROID Magazine
https://magazine.odroid.com/issue/print?issue=201904 39/66
5/2/2019 Print | ODROID Magazine
These ODROIDs are alive with the Recently updated and free to play,
sound of Android gaming! From C Gar eld Rush is still trying to catch
(e.g., ODROID-C2) to X (e.g., ODROID- that rascally cat (Figure 1). Just like
XU4), gaming on your favorite console before, there are tons of things to
has never been more fun. So open collect, 18 new costumes to be
your Google Play Store app and let’s unlocked, and–love ‘em or hate ‘em–
get downloading. more and more “free” reward videos
to watch. The version 5.0 update is still
Run Gar eld, Run!
free to own, so lace up your paws and
move out.
https://magazine.odroid.com/issue/print?issue=201904 40/66
5/2/2019 Print | ODROID Magazine
View:
Figure 1 – Gar eld Rush is an endless
running game with a cartoon avor
https://www.youtube.com/watch?
v=3aMtD0Klp2I
Fortnite Free Forever
Tweet, Tweet
Mega-hit Fortnite has just received a
new patch that purportedly brings 60 A little birdie told me that Human: Fall
devices. Will ODROID devices be one the next one to two months. You’ll
recall that this app from No Brake
of the few, one of the proud, one for
the game? Along with the enhanced Games revolves around a physics-
with a game piece named Bob. Bob’s It’s a Wild, Wild, Wild, Wild, Wild,
daily duties include puzzles, surprises, and Wacky World
and naturally, dangers. In meeting From Crescent Moon Games, the devs
these challenges, Bob must pull, push, who brought us Morphite and
carry, climb, and break his way to Ravensword Shadowlands, comes an
success. Already a hit release on unreal platform game. Linn: Path of
consoles and PCs ($14.99 USD), Orchards (Free; $2.99 USD in-app
Human: Fall Flat has over 5 million purchases) outwardly looks like any
reasons to enter the Android market. other platform puzzler. The only
But this birdie could be wrong: this is, trouble is that the game world itself is
of course, the same birdbrain that told playing against you, trying to pitch you
me ODROID-N1 would be released o the world! As weird as that sounds,
soon! Linn moves and grooves in an attempt
to make you fall o the world before
you can complete each level (Figure 4).
Your namesake in this animated M.C.
Escher-like world is Aban, a self-
described “exotic” guardian of nature.
All you have to do is help her
rejuvenate the ancient tree of light.
Good luck doing that.
View:
https://www.youtube.com/watch?v=-
Figure 4 – Hang on Aban or it’s curtains
Edk59BqSEU
in Linn: Path of Orchards
https://magazine.odroid.com/issue/print?issue=201904 42/66
5/2/2019 Print | ODROID Magazine
4. The Escapists 1 and 2 – $6.49 USD & Vice President of Marketing, Ms. April
$6.99 USD; Who’d have thunk it, right? Foole, “The presence of Android in an
https://magazine.odroid.com/issue/print?issue=201904 44/66
5/2/2019 Print | ODROID Magazine
PiHole
April 1, 2019 By BlueMedia.com ODROID-XU4, Tutorial
apt install git apt install dig
cd ~ && git clone dig blaumedia.com @ 127.0.0.1
https://github.com/qdm12/cloudflare
‑dns‑server.git ./dns‑server
https://magazine.odroid.com/issue/print?issue=201904 47/66
5/2/2019 Print | ODROID Magazine
https://magazine.odroid.com/issue/print?issue=201904 48/66
5/2/2019 Print | ODROID Magazine
There are many changes, so I boot of the processes. The rst must
recommend to simply overwrite your always be 127.0.0.1, the second can be
docker-compose.yml le with mine. anything else. I set here the IP of my
First of all, you should con gure on Fritzbox (router). In line 53 and 54 we
line 47 the IP of your device that will mount the Con g folder of PiHole on
run PiHole. With ip route get 1.1.1.1 | our host system so that they are not
awk ‘{print $ NF; exit}’ you can quickly deleted on each build process and
nd out which one this is (Source: remain persistent. That’s it so far, the
AskUbuntu.com ). Under Line 51 then rest you should already know or is
specify the password for the Web self-evident. With docker-compose up
interface of PiHole. What are we doing –build -d we can now build and start
here exactly? To make the two DoT everything. Insert PiHole Ad Channels
servers reachable for PiHole, we The web interface of PiHole we reach
create a Network Bridge at the bottom with our browser by simply calling the
of the le. This ensures that we can IP of the Raspberry Pi / oDroids. [
assign the individual containers xed Figure 02 ] PiHole WebUI Following the
IP addresses. Docker normally handles link you come to the interface. On the
this so that the containers can always left side select “Login” in the
be reached by the container name navigation and enter the password
among themselves. But DNS servers that you have just de ned in the
such as dnsmasq of PiHole don’t know con guration. Voilà! Best test again
upstream servers with their domain now that DNS queries are working
names not but expect IP addresses. with dig. If everything goes perfectly,
How could he resolve these domains we can now add lists for PiHole which
anyway? So give the containers xed are responsible for blocking
IPs; easy. This we determine at line 49 advertisements. I get my lists usually
and 50 as the upstream server for exclusively from rebog.net . Adding
PiHole. On line 34 and 35 we set the them into PiHole can be done under
DNS servers of the container itself, Settings -> Blocklists.
which are for example used during the
https://magazine.odroid.com/issue/print?issue=201904 49/66
5/2/2019 Print | ODROID Magazine
https://magazine.odroid.com/issue/print?issue=201904 50/66
5/2/2019 Print | ODROID Magazine
https://magazine.odroid.com/issue/print?issue=201904 51/66
5/2/2019 Print | ODROID Magazine
not exist for ARM, we are normally left Although a lot faster, it’s very limited
out playing them on SBCs like the by the old architecture that it’s
ODROID, although the device would supposed to run, and therefore you
be capable of running them if they will be limited to old DOS games, and
would exist for ARM. maybe Windows 3.11 applications.
basically everything you want. It qemu and is able to run x86 Linux
devices such as LAN and USB. The allows you to run Windows
issue with this solution is that it is very applications under Linux.
slow since it emulates an entire PC, I explored the capabilities of ExaGear
and, although it works, it’s so slow that in depth and wrote a couple of articles
it’s nearly unusable. I already had about it, as well as making a
success with Windows 2000 and XP compatibility list at
running on qemu (proving that it can https://oph.mdrjr.net/meveric/other/E
really run nearly everything), but it xaGear/, which shows quite nicely how
took forever and was very slow. good ExaGear performs. In fact, it’s
Another example would be DOSBox, probably the most mature software
although a very old 286 – 486 style allows you to run x86 applications on
Qemu is too slow to be useful and drivers, and although ODROIDs do not
DOSBox is too limited to run modern have native OpenGL, thanks to
Windows/Linux applications. But if @ptitSeb, we have an OpenGL to
ExaGear is that good, what is the OpenGL ES wrapper called gl4es which
reason for getting a new type of allows us to run many many OpenGL
emulator, aside from the fact that applications. But it is not only OpenGL
ExaGear was discontinued? that is being used from the ARM
Well ExaGear, although quite good, system rather than the i386 system.
had one very big aw: it was running There are many other libraries, such
everything in the i386 (x86) as SDL, OpenAL, X11 and so on, also
being used from the native ARM
environment, which also is the case
environment rather than using
for the GPU drivers, which limited the
everything from i386.
the software only for use with
applications that did not require 3D This also means that you need much
acceleration. Basically, any game that fewer libraries from i386 than
used “modern” graphics did not work, ExaGear, which required a full i386
since it required OpenGL, which our environment. This, combined with the
ODROIDs lack the necessary drivers x86 emulation, opens up an entirely
for and especially not for i386. new eld of applications which did not
of the libraries required for an Is Box86 the holy grail for x86 on
application are redirected to the ARM?
libraries from your ARM board, which It is possibly the holy grail for x86 on
means, instead of using SDL2 from ARM and the fact that it’s open source
i386, Box86 is able to use SDL2 from allows the project to be developed by
your ARM host system. This includes many people, which in time may result
the GPU drivers, as well. If an in a wonderful software package,
application requires OpenGL to run, it indeed. Currently Box86 is not there
will no longer ask for i386 OpenGL yet. It’s a very new project and still has
drivers, but instead ARM OpenGL
https://magazine.odroid.com/issue/print?issue=201904 53/66
5/2/2019 Print | ODROID Magazine
https://magazine.odroid.com/issue/print?issue=201904 54/66
5/2/2019 Print | ODROID Magazine
(https://www.gog.com/game/underta
le) also works well in 1080p, although
Figure 4 – Airline Tycoon Deluxe there isn’t much going on in the
gameplay matter of graphics. Gods Will Be
Neverwinter Nights Diamond Edition Watching
is a very deep RPG game in the (https://www.gog.com/game/gods_wi
Dungeon & Dragons universe. ll_be_watching) seems to work well
Currently, only the Enhanced Edition also. It is not always full speed, but
Pack can be bought on GoG nothing to worry about.
https://www.gog.com/game/neverwi
nter_nights_enhanced_edition_pack.
This is easily the most impressive
graphical game for the system, as it
uses @ptitSeb’s gl4es to convert the
OpenGL graphics to OpenGL ES. It’s
rather demanding, however, but Figure 5 – Freedom Planet opening
screen
https://magazine.odroid.com/issue/print?issue=201904 55/66
5/2/2019 Print | ODROID Magazine
https://magazine.odroid.com/issue/print?issue=201904 56/66
5/2/2019 Print | ODROID Magazine
k_shooter) starts, but is way too slow libraries needed to play your games
Set your environment variables as
to play. So yes, there is already a
described at
selection of games you can run with
https://github.com/ptitSeb/box86/bl
Box86 and I’m sure there will be more ob/master/USAGE.md
to come. 5. If you haven’t got gl4es already
repeat Steps 1-5 for gl4es as well.
What about Windows games and
Wine? 6. Try to get things to work.
https://magazine.odroid.com/issue/print?issue=201904 57/66
5/2/2019 Print | ODROID Magazine
similar that will house libraries they available for armhf (32bit) operating
use in their programs, and the script systems at the moment, so you
will automatically include these paths probably won’t be able to use it on the
in the search path for libraries. ODROID-C2 or ODROID-N2.
https://magazine.odroid.com/issue/print?issue=201904 58/66
5/2/2019 Print | ODROID Magazine
CarPC
April 1, 2019 By @Bence9218 Android, ODROID-XU4, Tinkering, Tutorial
https://magazine.odroid.com/issue/print?issue=201904 59/66
5/2/2019 Print | ODROID Magazine
Display
I had a 2 DIN Android head unit which
ts perfectly into my car dashboard. I
recently used this unit, but bricked it
when I tried to root the OS on it. So I
bought a display panel with a better
viewing angle, a touch panel, and an
HDMI drive board.
Figure 1 – The display as seen after The display case has three backlit
installation buttons, a potentiometer (an
The main features of this nished encoder), and a USB socket. To get the
project will include: buttons working I used a USB
keyboard drive board, and I soldered
Android 7 (LineageOS 14.1) the three buttons to F1, F2 and 0. The
Live tra c navigation encoder is connected to the LG head
The ability to play music from local unit (ampli er) master volume and
storage as well as Spotify you can turn the display o or on by
Engine diagnostics and live data pushing the encoder. The USB socket
through OBDII socket
is simply connected to the display’s
powered USB hub (which is connected
There are a number of features that
to the ODROID).
are still works in progress at this time,
including Bluetooth Hands-free Pro le On the software side, I needed to
(HFP) for hands free phone calling recompile the OS from source to x
for this), and GPS tracking software for 0eef 0001). It was an easier way to
the ZTE Blade to track my car’s make the buttons work correctly. I
location at any time and warn me created my own key layout map (.kl
when the car is moving without me le) for “Home”, “Back” and “App
https://magazine.odroid.com/issue/print?issue=201904 60/66
5/2/2019 Print | ODROID Magazine
Power In
HDMI
USB (Touch screen, front buttons,
front USB socket)
RJ45 (HDMI display drive board
buttons)
Jack (volume remote)
ZTE Blade
The ODROID’s production kernel does
Figure 2 – Some of the outputs on the not contain the Remote Network
display module Driver Interface Speci cation (RNDIS)
kernel module which is needed to
OBDII ELM327 USB cable
share your Internet connection from
Of course, I had the wrong USB to
your Android phone to the ODROID
RS232 converter interface, so I needed
via USB. I recompiled the kernel with
to x this little problem. I converted it
this kernel module and created a
from the CH340 chip to the PL2303
userinit script on the phone, which
chip which is compatible with the
automatically turns on the USB
software.
tethering function when the phone is
connected.
https://magazine.odroid.com/issue/print?issue=201904 61/66
5/2/2019 Print | ODROID Magazine
ODROID
The biggest challenge was making
sure that the ODROID shuts down
correctly when the ignition is turned
o , and that afterwards the power
also goes away. I created my own
power supply and power control
boards, which seemed to do the job. If
the ignition is switched o , the system
Figure 4 – After the recompile
shuts down and then one minute later
LG head unit the power to the hardware is cut o . I
I also added a line-in RCA connection have a special USB socket which stays
on the back. powered when the car ignition is o
that keeps the ZTE blade alive.
https://magazine.odroid.com/issue/print?issue=201904 62/66
5/2/2019 Print | ODROID Magazine
Please tell us a little about yourself. My 3D designs for publicity and printed
name is Rob, better known as Lix- media. My daughter is 5 and my son is
Alpha on the ODROID Forums, and I 8, who are both Canadian-Japanese
am 43 years old. I have a wife, two (Japanese from my wife side). My wife
kids, a siamese cat, and all of my manages the o ce of a big tool rental
teeth. I love playing old games from company in Montréal.
the 90s on my ODROID-GO, creating
music on my Pocket Operators, and
ne-tuning my son’s RC Car. I work as
a freelance graphic designer creating
https://magazine.odroid.com/issue/print?issue=201904 63/66
5/2/2019 Print | ODROID Magazine
10 PRINT "Go to question 2"
20 GOTO 10
Picture 1 – Rob’s Kids
I was born in a region of the Province What attracted you to the ODROID
of Québec, in Canada, called Mont- platform? I always wanted a small
Tremblant. For anyone that likes to ski, portable device to play my favorites
they will know about this location, for retro games. I looked everywhere on
sure, since it was recently bought by the web and found many solutions,
the Aspen Group. But now I live in but at a very high price. Also, I wanted
Montréal. I studied psychology, but to get a device that I could easily put in
quit before nishing and started my my pocket without being afraid to
own graphic design company. Let me break it. It was then that I found the
tell you that my studies were not a ODROID-GO. The device was
waste though, since I use psychology inexpensive, small, and well built. I
almost every day with some of my also loved the approach of
customers! Hardkernel, especially the way they
marketed the product and how they
https://magazine.odroid.com/issue/print?issue=201904 64/66
5/2/2019 Print | ODROID Magazine
talked about it. It was straight to the and I can count on it every time I need
point and they did not try to it.
exaggerate the capacity of the device.
Which ODROID is your favorite and why?
Everything was clear, and this is not
To be honest, the only one I used is
the case with many other companies. the GO, so I guess it’s my favorite. I
I own many other solutions love this device! Having Commander
(Waveshare GameHat, GPD Win, GPD Keen or Wolfenstein 3D in my pocket
Win 2, Clockwork GameShell), but they is a dream that I have had since the
all have their problems: too fragile, 90s.
too bulky, overheating, or too What innovations would you like to see
expensive. Hardkernel managed to in future Hardkernel products? As
nd the right level of power and
previously mentioned, I only have an
performance for a pocketable device
ODROID-GO, so I’ll talk about that one.
and believe me, many have tried but
I would love to see a little bit more
failed. Of course, some of the
power. It would be nice to be able to
aforementioned devices are way
run GBA or SNES for exemple. Since I
stronger but can you carry them am a graphic designer, I would love it
without fear everywhere you go? if the user interface was a bit more
How do you use your ODROIDs? I only open source, so I could create my own
have an ODROID-GO for now, but I UI.
use it every day. I am a gamer, but What hobbies and interests do you have
with my work, I do not have times to apart from computers? I have 2 kids, so
play games very often. I work 7 days a they are my hobbies most of the time!
week, so the only moment I have is
But, when I have a little bit of time, I
when I go to bed. So I lay down on my
love riding my mountain bike, playing
bed, get all comfy, and play some
around with my Pocket Operators, or
Wolfenstein 3D or Commander Keen
going outside with my camera trying
until I fall asleep. This device is to get the perfect shot.
reliable, has a very good battery life,
https://magazine.odroid.com/issue/print?issue=201904 65/66
5/2/2019 Print | ODROID Magazine
What advice do you have for someone Figure X – Rob’s 3D modelling Work
wanting to learn more about computers? The same happened when I began
I am not really a programmer, so I exploring 3D modeling with 3DS Max,
can’t give advice on the technical side Maya, C4D or Solidworks. Anyone can
of it, but I can certainly give advice on learn anything; it’s just a matter of
the learning curve associated with time and work. Start from the
computers/programming. When I left beginning, try to master every aspect
university and decided to start my of the software package that you are
own design business, I had minimal learning, and above all, do not
knowledge of Photoshop or Illustrator, compare yourself with others. Some
but I woke up every morning and peoples learn fast, while others learn
worked on it. In the beginning, I slowly. In the end, if you have fun, you
doubted myself a lot, and even are in the right place and should put
thought about quitting. But in the end, all your energy into what you are
with discipline and perseverance, I doing.
mastered it.
https://magazine.odroid.com/issue/print?issue=201904 66/66