Apt-Cacher on Raspberry Pi

When you’re developing an application on Raspberry Pi, you might have to install a few dependencies packages from an APT repository. Sometimes you break some applications and a clean install is probably your last resort, and you find yourself downloading the same packages over-and-over again.

In my case, I was running the pi-gen shell script available from https://github.com/RPi-Distro/pi-gen. This shell script is very handy when you want to create your own custom Raspberry Pi OS image, with the packages you need. This is very handy in production, where you want the process to be as simple as burning an image to an SD card, and you’re good to go.

However, when developing the shell script to produce the proper image I need, I find myself sometimes breaking the script and often had to restart it all over again, downloading the same packages from the APT repository. There’s actually a solution for this problem, create an APT cache in your local network in a Debian box (or a spare Raspberry Pi). I use my Pi.hole Raspberry Pi for this APT Cacher. Installation is simple, it’s only by:

# apt install apt-cacher-ng

Once you’re done, you can use that spare Raspberry Pi as an apt cacher. You can simply add a line to your pi-gen script config:

APT_PROXY='http://pi.hole:3142'

This works like a charm and I can shave 9 minutes from downloading the packages from repository since now I have it cached.

[06:58:17] Begin /home/vagrant/pi-gen
[06:58:17] Begin /home/vagrant/pi-gen/stage0
...
[07:13:32] End /home/vagrant/pi-gen/stage2

(15.25 minutes)

[06:45:27] Begin /home/vagrant/pi-gen
[06:45:27] Begin /home/vagrant/pi-gen/stage0
...
[07:09:48] End /home/vagrant/pi-gen/stage2

(24.35 minutes)

By using this APT cache, you can save a few minutes (depending on your network speed) downloading the same base packages over-and-over when you need to develop a bunch of images at the same time.

Idea: Sistem Presensi Otomatis berbasis WiFi

Saya sedang ada latihan paduan suara di gereja, tiba-tiba saya mendapatkan ide menarik untuk mendata presensi anggota secara otomatis. Ketua paduan suara sempat menyuarakan kebutuhan akan absensi untuk tahu mana saja anggota yang aktif dan tidak. Saya sempat memutar otak, bagaimana cara membuat sistem yang otomatis untuk hal ini? Membuat sistem berbasis keycard? Ah, nanti banyak yang tidak bawa keycard. Bagaimana kalau pakai aplikasi dan komunikasi Bluetooth pakai HP? Waduh, saya yakin pasti belum tentu semuanya bisa diajak untuk pakai Bluetooth, apalagi dengan aplikasi rumit.

Belum lama ini saya berjibaku untuk memasang Raspberry Pi di jaringan WiFi hotel, sesuai pengalaman saya semua jaringan hotel menggunakan Mikrotik. Untuk login dengan Mikrotik dibutuhkan Javascript untuk melakukan hash dari password. Setelah berjibaku lama, saya menemukan script Python untuk melakukan hashing tersebut, sehingga koneksi ke Wi-Fi hotel menjadi mudah, saya cukup menjalankan script ini. Saya teringat bahwa WiFi di paroki juga menggunakan Mikrotik.

Barusan saat latihan, saya kembali terpikir ada dua fakta menarik, semua orang sudah tidak terlepas dengan mobile phone nya, it’s always in your person (or at least most of the time if you didn’t forget to bring it). Selain itu adalah, hampir semua orang mencari WiFi kalau ada opsi gratis. Berbasiskan dua fakta sederhana ini, saya tertarik membuat script sederhana untuk memantau siapa yang ada di jaringan tersebut untuk mengetahui siapa saja yang hadir.

Program nya sederhana, idenya adalah untuk bergabung dengan jaringan WiFi paroki, masuk melalui Mikrotik login, lalu melakukan ARP scan pada saat jam mulai latihan, mendata semua MAC address yang ada, lalu melakukan ARP scan kembali pada saat jam selesai latihan dan kembali mencatat semua MAC address.

Seems like a good scripting practice for my weekend ūüôā

SDS011 BME280 and MQTT

Sambil menunggu kedatangan sensor SDS011, saya menulis artikel singkat bagaimana cara untuk mengambil data dari BME280 dan mengirimkannya ke ThingsBoard. Namun terganggu dengan adanya mati listrik hari Minggu dan Senin, sehingga pada hari Senin sensor sudah datang maka saya putuskan untuk menuliskan artikel lengkap percobaan dengan BME280, SDS011, dan MQTT

Modul Python Adafruit untuk BME280

Modul Python untuk BME280 sudah disediakan oleh Adafruit dengan CircuitPython. CircuitPython ini hanya bisa dijalankan di Python 3, Adafruit sudah memiliki tutorial sendiri bagaimana cara menyiapkan CircuitPython di Raspberry Pi. Langkah-langkah detil untuk mempersiapkan Raspberry Pi untuk menggunakan CircuitPython dapat dilihat di link ini, namun saya akan merangkum dengan singkat.

Hal pertama pastikan Raspberry Pi anda sudah diupdate:

# apt update
# apt upgrade

Pastikan bahwa di Raspberry Pi sudah ada PIP untuk Python3

# apt install python3-pip

Untuk menggunakan sensor BME280 dengan I2C maupun SPI pastikan Anda sudah menyalakan I2C dan SPI melalui command line tool:

# raspi-config

Setelah memastikan semua dependencies sudah terinstal di Raspberry Pi, instalasi untuk Python dapat dilakukan dengan command:

# pip3 install adafruit-circuitpython-bme280

Setelah instalasi Adafruit-CircuitPython-BME280, modul adafruit_bme280 sudah dapat diakses dari Python3, semua dependencies dalam Python3 yang dibutuhkan juga sudah terinstalasi. Sensor I2C memiliki address tertentu dan umumnya bisa diubah dengan menggunakan pull-down atau pull-up resistor di pin ADR. BME280 oleh Adafruit memiliki pull up resistor di ADR, sehingga address nya 0x77, lalu modul China yang umum dijual menggunakan pull-down resistor di pin ADR sehingga address nya 0x76. CircuitPython module untuk BME280 yang disediakan Adafruit menggunakan addrses 0x77, namun dapat diubah pada Class initialization dalam script Python. Contoh program ini sudah tersedia di GitHub saya.

SDS-011 dengan Python Serial

SDS011 mengirimkan data dari serial menggunakan USB converter (CH340), driver untuk CH340 sudah tersedia di Linux, sehingga yang diperlukan hanyalah modul Python untuk mengakses data Serial. Karena BME280 menggunakan Python3, maka untuk PySerial digunakan Python3. Instalasi PySerial dapat dilakukan dengan PIP3

# pip3 install PySerial

Setelah instalasi PySerial, koneksikan sensor dengan USB ke Raspberry Pi dan jalankan script yang sudah tersedia di GitHub saya, maka akan terlihat pembacaan sensor PM2.5 dan PM10 di tampilan layar.

Publisher MQTT untuk Python

Setelah data sensor sudah dibaca oleh script Python, module paho-mqtt dapat dipakai untuk mengirimkan data ke MQTT broker, untuk saat ini saya menggunakan ThingsBoard. Untuk mengirimkan telemetry dengan ThingsBoard, yang diperlukan adalah token akses untuk device yang sudah digenerate di ThingsBoard. Pengiriman data telemetri ke ThingsBoard memiliki topic tertentu yakni ‘v1/devices/me/telemetry’, data yang dikirimkan di format dengan JSON. Data ini diterima oleh ThingsBoard dan dapat dibuat Dashboard seperti Gambar di bawah ini.

dashboard.png

Dengan hasil pembacaan dengan dashboard ini, saya mengakhiri tulisan kali ini yang menunjukkan bagaimana sebuah sistem dengan BME280 dan SDS011 dapat mengirimkan informasi realtime tentang kualitas udara menggunakan ThingsBoard dan MQTT.

Sensor PM2.5

Artikel ini termasuk dari seri pembahasan solusi PolusiJakarta. Saat melihat sensor rendah biaya, saya melihat beberapa opsi yang tersedia di Tokopedia, tentu sebelum membuat purwarupa, kita perlu mencari sensor-sensor yang sudah tersedia di pasaran Indonesia terlebih dahulu sebelum memilih sensor-sensor lain.

Sensor SHARP GP2Y1010AU0F

Sensor kualitas udara yang pertama kali saya lihat adalah sensor dari SHARP yaitu GP2Y1010AU0F. Harganya cukup murah, umumnya dibawah 100rb.

 

dust sensor principles
Gambar 1. Sensor SHARP GP2Y1014AU0F dan cara kerjanya

Prinsip nya menggunakan LED infrared dan fototransistor (phototransistor). LED infrared akan menyala dan fototransistor akan membaca cahaya yang sudah dipengaruhi oleh adanya debu partikulat yang masuk melalui lubang sensor. Cara kerja sensor ini sederhana, yang diperlukan adalah LED drive dari mikrokontroler dan pembacaan sinyal analog. Namun kelemahan dari sensor ini adalah tidak dapat membedakan PM10 dan PM2.5, sensor ini mungkin cukup untuk memantau kondisi debu di dalam ruangan.

Sensor Nova SDS011

Sensor kualitas udara ini masih cukup hangat dibicarakan oleh beberapa paper lingkungan, dan banyak tersedia di AliExpress karena merupakan buatan China. Sensor ini tersedia di Tokopedia juga dengan margin yang cukup besar, namun dibandingkan ongkos kirim dan waktu menunggu barang dari China, saya rasa opsi ini cukup menarik.

Gambar 2. Nova PM Sensor

Membaca beberapa paper yang membahas sensor ini, saya menjadi condong untuk memakai sensor ini. Melihat produknya yang sudah memiliki built-in fan dan sudah tersedia TTL-to-USB converter dengan kabelnya, saya cukup yakin untuk memulai pengembangan dengan modul ini, karena hal ini berarti sensor dapat dengan mudah dikoneksikan dengan komputer dan menggunakan program Serial sederhana untuk mendapatkan data.

Awalnya saya cukup ragu dengan adanya built-in fan yang mungkin akan memakan arus yang berlebih, maka saya putuskan untuk membaca datasheet sebelum mengambil keputusan.

Sensor SDS011 ini dapat mengukur PM2.5 dan PM10 dan mengirimkan hasil pembacaannya dengan PWM dan TTL UART. Level tegangan dari sensor ini adalah 5V, disuplai daya 5V dengan arus rating sebesar 70mA. Sensor ini mengeluarkan data setiap 1 detik dan memiliki titik operasional -10 sampai 50 derajat Celsius , kelembaban sampai dengan 70%, tekanan udara 86KPa – 110 KPa.

USB-to-TTL, daya yang masih di bawah 0.5W, dependensi terhadap temperatur, kelembaban, dan tekanan udara. Hal ini memicu saya untuk mencoba sensor ini dengan Raspberry Pi, di mana saya dapat menghubungkan sensor BME280 bersamaan dengan sensor SDS011 ini yang terhubung dengan USB.

Saya memutuskan untuk membeli sensor ini dari Tokopedia, saya harap bisa mulai menggarap sensor ini dan menggunakan BME280 sebagai pembanding dan membuat purwarupa operasional secepat mungkin.

Bluetooth HC-05 AT Commands

Bluetooth adalah salah satu modul komunikasi sederhana yang dapat dibeli dengan harga relatif murah. Modul Bluetooth HC-05 dapat dengan mudah ditemukan di berbagai jejaring toko online dengan harga sekitar 50 ribu.  Sebelum membahas lebih lanjut tentang Bluetooth saya akan membahas beberapa konsep dasar Bluetooth.

Introduction

Bluetooth adalah sebuah standar teknologi nirkabel untuk komunikasi data jarak dekat. Bluetooth menggunakan frekuensi 2.4 GHz yang merupakan frekuensi bebas untuk transmit dengan batasan daya yang rendah. Standar Bluetooth mencakup banyak protokol, salah satunya adalah protokol RFCOMM. Modul Bluetooth yang umum kita jumpai ini menggunakan protokol ini. Protokol RFCOMM adalah protokol yang paling populer dalam Bluetooth karena banyaknya API yang tersedia untuk protokol ini, selain itu protokol ini, yang sering disebut serial port emulation, dapat diintegrasikan pada banyak aplikasi yang menggunakan RS-232 sebagai antarmuka komunikasinya.

Generic Bluetooth RFCOMM Modules

Setelah mengetahui beberapa konsep dasar Bluetooth, sudah waktunya untuk melihat cara kerja Bluetooth secara langsung. Untuk demonstrasi kali ini, saya mencoba dengan Bluetooth module: Tokopedia (Disclaimer: Tidak ada maksud untuk promosi).

Bluetooth
Gambar 1. Bluetooth HC 05 Module

Module Bluetooth sesuai Gambar 1 adalah modul berbasis Bluetooth chip BC417. Modul ini memiliki keluaran pin STATE, RX, TX, GND, +5V, dan EN. Untuk menggunakan modul ini, cukup koneksikan pin RX, TX, GND, dan +5V.

Pin 5V atau pin VCC di modul ini sebenarnya terhubung dengan LDO voltage regulator pada board modul Bluetooth ini. Saya coba melihat regulator yang digunakan, namun sulit menemukan datasheet dari komponen SMD ini. Sebelum saya membahas bagaimana pemrograman AT commands menggunakan Raspberry Pi, pertama saya uji coba terlebih dahulu serial port dengan Bluetooth module ini.

Koneksikan pin TX Bluetooth dengan RX Raspberry Pi, RX Bluetooth dengan TX Raspberry Pi, VCC dengan +5V Raspberry Pi dan GND dengan GND Raspberry Pi. Saya nyalakan minicom untuk membuka port serial (/dev/ttyS0) dengan baudrate 9600. Tampilan uji coba dapat dilihat pada Gambar 2.

Capture
Gambar 2. Penerimaan Serial Port via Bluetooth

AT Commands Bluetooth

Setelah berhasil komunikasi Serial, selanjutnya yang perlu dicoba adalah AT Commands, melalui AT Commands, dapat dilakukan berbagai macam konfigurasi seperti nama Bluetooth dan PIN, serta baud rate. Untuk itu saya membuat script singkat di Python untuk melaksanakan fungsi ini, sebelum mencoba script ini, pastikan Raspberry Pi sudah terinstal Python dan package PySerial (python-serial).

# apt-get install python-serial

Sebelum saya memberi source code dari AT command configuration, perlu saya tekankan bahwa untuk memasuki AT commands terdapat tiga cara, pertama memberi pin 34 pada Bluetooth Module tegangan 3.3V, jika dengan cara ini, modul akan masuk ke mode full AT commands, di mana semua AT commands dapat diakses dan baudrate dari modul adalah 38400. Cara kedua adalah menekan tombol sebelum modul menyala dan pastikan tombol tetap tertekan saat konfigurasi berlangsung (secara efektif cara ini sama dengan cara pertama), sehingga modul akan masuk dalam mode full AT command. Cara ketiga adalah setelah modul sudah menyala, tekan tombol pada modul dan tahan saat melakukan konfigurasi, modul akan memasuki mode semi AT command dimana baudrate tetap menggunakan baud rate komunikasi serial normal (9600 baud default). Jika Anda lupa baud rate komunikasi serial normal, sebaiknya program Bluetooth menggunakan full AT command mode.

# attest.py
# Sending AT commands to Bluetooth HC-05

import serial
import time

bluetooth = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=5)

bluetooth.write('AT+NAME=JosefMTD\r\n')
result = bluetooth.read(100)
print result

bluetooth.write('AT+UART=38400,0,0\r\n')
result = bluetooth.read(100)
print result

Untuk memakai program di atas, ubah “/dev/ttyS0” dengan “/dev/ttyACM0” jika Anda menggunakan PL011 Hardware UART dari Raspberry Pi, gunakan /dev/ttyS0 jika Anda menggunakan mini UART. Baudrate sesuaikan dengan baudrate modul atau masukan 38400 jika Anda ingin memasuki mode full AT command.

Untuk mengubah nama dan baudrate, modul Bluetooth dapat dikonfigurasi dalam mode Semi AT command, sehingga proses yang saya lakukan adalah menekan tombol, menjalankan script attest.py lalu melepas tombol saat program selesai berjalan.

Capture1.PNG
Gambar 3. Output dari program attest.py

Sekian dahulu post saya untuk kali ini, tinggalkan komentar jika Anda mengalami masalah setting up Bluetooth

Raspberry Pi Zero Headless Setup

Anda ingin mencoba memulai bermain dengan Raspberry Pi? Mungkin Anda memiliki permasalahan ini dalam melakukan penyetelan Raspberry Pi seperti: tidak ada monitor untuk mengonfigurasi Raspberry Pi, tidak ada keyboard untuk mengetik command, ataupun tidak ada kabel LAN. Mungkin permasalahan Anda sama seperti saya, mempunyai Raspberry Pi Zero W, yang hanya bisa diakses melalui Wireless, koneksi USB hanya dengan micro USB dan mini HDMI. Jika Anda memiliki Raspberry Pi Zero dan ingin mencoba untuk memulai bermain dengan Raspberry, silakan membaca guide ini untuk memulai instalasi Raspberry Pi Anda!

IMG_20180401_222102.jpg
Gambar 1. Raspberry Pi Zero Wireless

Instalasi Operating System Raspbian Stretch Lite

Hal yang Anda butuhkan untuk memulai adalah sebagai berikut:

  1. Raspberry Pi Zero Wireless (pastikan bukan yang Raspberry Pi tanpa WiFi)
  2. Micro SD Card (sebaiknya Class 10 agar operasi Read/Write Disk nya lebih cepat)
  3. Charger HP 2A
  4. Laptop dengan SD Card Reader (gunakan Micro-SD Adapter jika perlu)
  5. Wireless Router atau Mobile WiFi Hotspot

Hal pertama yang Anda perlu lakukan adalah masukkan SD Card ke komputer Anda, lalu format SD Card tersebut, jika Anda sudah pernah menginstalasi Raspbian sebelumnya pada SD Card tersebut dan ingin menghapusnya, Anda dapat menggunakan SD Card Formatter (sdcard.org). Sebagai perbandingan, Gambar 2 menunjukkan formatting menggunakan quick format Windows dan SD Card Formatter, Windows Formatter hanya bisa melakukan format untuk partisi F:\ di SD Card, sedangkan SD Card Formatter mampu melakukan format untuk seluruh SD Card.

Screenshot 2018-04-01 22.40.45
Gambar 2. Perbandingan format dengan Windows Formatter dan SD Card Formatter

Setelah Anda melakukan Quick Format menggunakan SD Card Formatter, Anda dapat menambahkan OS Raspbian pada SD Card. Pertama, hal yang perlu Anda lakukan adalah download ZIP file dari OS Raspbian Stretch Lite. Download dari website resmi Raspberry Pi untuk Raspbian Stretch Lite, dengan kernel Linux 4.9. Terdapat dua varian Raspbian Stretch, dengan Desktop dan Lite, Lite adalah versi tanpa GUI, sedangkan Desktop memiliki GUI sehingga dapat dihubungkan dengan monitor dan keyboard dan dipakai layaknya komputer biasa.

Setelah Anda sudah memiliki Raspbian Stretch Lite dan SD Card yang sudah di format, proses selanjutnya adalah untuk flashing Raspbian Stretch Lite pada SD Card Formatter. Cara yang paling saya suka untuk menginstalasi Raspberry Pi adalah dengan menggunakan program Etcher. Program ini dapat diunduh dari website Etcher.io, program ini mudah dipakai dan ringan.

Screenshot 2018-04-01 23.00.17
Gambar 3. Pemilihan image Raspbian Stretch Lite untuk flash pada SD Card dengan program Etcher

Setup SSH Server dan WiFi

Untuk dapat mengakses Raspberry Pi Anda tanpa membutuhkan monitor ataupun keyboard Anda membutuhkan SSH Server dan koneksi WiFi. Pada komputer yang Anda ingin pakai untuk mengonfigurasi Raspberry Pi, pastikan Anda memiliki client SSH, Anda dapat menggunakan PuTTY.

Untuk menyalakan SSH, Anda perlu membuat file “ssh” pada partition boot pada SD Card yang sudah Anda flash dengan OS Raspbian. Pastikan Anda membuat file ssh tanpa extension apapun (bukan .txt), file ini tidak perlu diisi, hanya pastikan bahwa terdapat file bernama “ssh”.

Screenshot 2018-04-01 23.16.44
Gambar 4. Instalasi SSH Server dengan menambahkan file SSH tanpa ekstensi pada SD Card dengan Raspbian

Setelah menambahkan server SSH, hal kedua yang perlu Anda lakukan adalah membuat sebuah file “wpa_supplicant.conf” pada partisi boot. Isi file tersebut sebagai berikut:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="NAMA_WIFI_ANDA"
    psk="PASSWORD_ANDA"
    priority=1
}

Gunakan Notepad untuk menulis file tersebut, pastikan Anda simpan ini sebagai wpa_supplicant.conf dan bukan .txt. Gambar 5 menunjukkan contoh hasil dari pembuatan file wpa_supplicant yang ditaruh pada partisi boot yakni di F:\. Ganti NAMA_WIFI_ANDA dengan nama SSID dari WiFi yang Anda pakai, dan PASSWORD_ANDA sesuai dengan password WiFi-nya.

ConfigureWPASupplicant
Gambar 5. Pengaturan file wpa_supplicant untuk koneksi WiFi

Setelah Anda telah melakukan instalasi OS Raspbian dan menambahkan file-file sesuai dengan petunjuk di atas, eject SD card tersebut dan pasang ke Raspberry Pi Zero.

Akses SSH Raspberry Pi dari PC

Setelah Anda memastikan file yang dibuat sudah sesuai dengan tutorial ini, nyalakan Raspberry Pi Zero untuk pertama kalinya dengan SD Card yang sudah diinstalasi dengan OS Raspbian yang sudah dikonfigurasi untuk dapat diakses dengan SSH melalui WiFi. Cek IP Address dari Raspberry Pi yang Anda miliki untuk dapat mengaksesnya melalui Raspberry Pi, Anda bisa menggunakan Tabel DHCP dari Router WiFi Anda untuk mengetahui IP Address Raspberry Pi. Contoh Tabel DHCP dari Router dapat dilihat pada Gambar 6.

Router
Gambar 6. IP Address dari Raspberry Pi Zero

Setelah itu Anda dapat membuka PuTTY untuk mengakses SSH dari Raspberry Pi dengan IP Address yang sudah Anda ketahui dari Tabel DHCP Router Anda. Setelah itu Anda dapat memasukkan login dengan menggunakan

login as: pi
pi@192.168.0.7's password: raspberry

Pastikan Anda mengikuti petunjuk di atas yakni memasukkan “pi” sebagai nama login dan password “raspberry”. Setelah itu Anda dapat mengakses Raspberry Pi Zero Anda menggunakan SSH, untuk mengubah password Anda agar tidak mudah dijebol orang maka Anda perlu memasukkan command:

$ passwd

Anda akan diminta mengisi password lama (raspberry) dan memasukkan password yang baru. Setelah Anda telah memasukkan password baru, pastikan SSH Server di Raspberry Pi sudah dalam posisi menyala secara permanen, hal ini dapat dilakukan dengan menggunakan command sebagai root (sudo):

# raspi-config

Dengan mengakses raspi-config, Anda akan melihat tampilan sesuai pada Gambar 7 pada window PuTTY Anda. Arahkan pointer ke “Interfacing Options” dan klik Enter.

RaspiConfig
Gambar 7. Tampilan Raspberry Configuration Tool (Raspi-Config)

Setelah Anda mengakses Interfacing Options, pilihlah P2 SSH untuk mengakses pengaturan SSH Server. Anda akan menemukan pilihan “Would you like the SSH server to be enabled?” pilih Yes dan tekan Enter. Anda akan melihat tulisan “The SSH server is enabled”. Setelah itu Anda akan dikembalikan ke tampilan utama, tekan Finish untuk keluar. Selanjutnya Anda akan dapat mengakses Raspberry Pi Anda via SSH tanpa perlu memikirkan adanya monitor/keyboard, pastikan ada WiFi dengan SSID dengan Password sesuai dengan penyetelan yang Anda lakukan.

Masih memiliki pertanyaan? Silakan bertanya pada blog post ini, selamat mencoba Raspberry Pi Anda.

Install Python 3.6 on Raspbian

Ingin memakai Python 3.6 pada Raspberry Pi? Namun saat Anda menjalankan program menggunakan Python di Raspberry Pi, versi Python yang dipanggil adalah versi Python 2.7. Post blog ini akan membahas bagaimana mengubah default Python 2.7 menjadi Python 3.6.

Sebelum saya memulai tutorial ini, saya ingin menjelaskan satu hal yang mungkin sering terlihat pada tutorial-tutorial Linux, yaitu anotasi $ dan #. Saat menulis command Linux Terminal di dokumen umumnya anotasi $ dan # sering dipakai sebagai prefix. Asal usul $ dan # adalah dari Terminal Linux, jika user yang dibuka bukan root, maka Terminal Linux akan menunjukkan tanda $, jika Terminal Linux menunjukkan tanda # artinya Anda sedang mengakses root. Pada dokumen yang menunjukkan command Linux, # menandakan command tersebut harus diakses sebagai root (atau dengan sudo jika bukan root).

Hal pertama yang dapat dilakukan adalah mengecek apakah Python default Anda ada pada Python 3.x atau pada Python 2.x, untuk memastikan hal ini gunakan command sebagai berikut:

$ python --version

PythonVersionStart
Gambar 1. Versi Python sebelum update ke 3.6.4

Beberapa hal perlu dilakukan untuk mengubah Python 2.7 menjadi Python 3.6. Hal pertama yang perlu diperhatikan adalah memastikan bahwa beberapa package dependencies sudah di-install pada Raspberry Pi. Pastikan dengan menggunakan command sebagai berikut:

# apt-get update
# apt-get install build-essential tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev

Setelah melaksanakan beberapa program tersebut, Anda dapat langsung mengunduh source code Python 3.6 dari website resmi Python. Source code Python 3.6 yang tersedia berupa tar.xz sehingga anda perlu melakukan proses unpack. Sebelum mengunduh dengan wget, pastikan Anda sudah di direktori /tmp/ agar source code yang Anda unduh akan terhapus secara otomatis setelah reboot.

$ cd /tmp/
$ wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz
$ tar xf Python-3.6.4.tar.xz

DownloadPythonSource
Gambar 2. Hasil unduhan dan ekstraksi dari source code Python 3.6.4

Setelah Anda berhasil mengekstrak seperti pada Gambar 2, Anda dapat melihat bahwa source code Python 3.6.4 sudah berada pada /tmp/Python-3.6.4. Untuk melanjutkan proses instalasi Python 3.6.4, akses direktori Python-3.6.4

$ cd Python-3.6.4

Setelah membuka direktori, ikuti proses ini untuk instalasi Python 3.6.4:

$ ./configure
$ make
# make altinstall

Setelah instalasi Python 3.6, Anda akan melihat bahwa Python default masih seperti Python sebelumnya, untuk saya Python masih 2.7.13. Untuk mengubah default Python yang digunakan perlu digunakan update-alternatives. Pertama, pastikan Anda tahu posisi instalasi Python 3.6 dan bahwa Python 3.6 yang sudah diinstal dapat diakses. Lakukan kedua command ini untuk mengetahui posisi Python 3.6

$ ls /usr/bin/python*
$ ls /usr/local/bin/python*

Setelah mengetahui posisi executable Python 3.6, lakukan update-alternatives untuk menambahkan Python 2.7.13 dan Python 3.6.4 sebagai alternatif Python. Gambar 3 menunjukkan hasil keluaran dari command untuk mengetahui posisi executable dari Python2.7, Python3.5 dan Python3.6. Tambahkan semua executable Python ini sebagai alternatif dari Python.

FindingPythonExecutable
Gambar 3. Lokasi Python executables pada direktori root OS Raspbian

Setelah mengetahui posisi yakni pada /usr/bin/ untuk Python2.7 dan Python3.5 dan pada /usr/local/bin/ pada Python3.6 yang baru diinstal. Lakukan proses  penambahan alternatif /usr/bin/python dengan menggunakan command sebagai berikut:

# update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
# update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2
# update-alternatives --install /usr/bin/python python /usr/local/bin/python3.6 3

Setelah menambahkan sesuai urutan di atas, Python3.6 menjadi mode automatis dari python. Jika Anda memanggil python –version akan menunjukkan keluaran seperti pada Gambar 4.

UpdateAlternativesPython
Gambar 4. Pengubahan versi otomatis Python menjadi Python 3.6.4

Jika Anda ingin mengubah kembali default Python menjadi Python 2.7.13, Anda dapat melaksanakan command sebagai berikut:

# update-alternatives --list python
# update-alternatives --config python

Setelah mengeksekusi command di atas Anda akan diminta untuk memasukkan nomor yang ingin Anda pakai sebagai mode default Python, ketik 1 jika Anda ingin kembali menggunakan Python 2.7.13 karena satu atau dua hal (misalnya akibat library yang Anda pakai masih memerlukan Python 2.7). Setelah Anda memilih Python yang Anda inginkan, Anda dapat mengecek versi Python default dengan python –version dan hasilnya akan terlihat seperti pada Gambar 5.

RevertPythonTo27From36.PNG
Gambar 5. Pengembalian versi default Python menjadi Python 2.7.13

Anda dapat menggunakan command konfigurasi di atas untuk memilih versi Python yang Anda inginkan, Anda dapat melakukan ini jika versi Python terbaru sudah tersedia dan ingin menambahkannya ke Raspberry Pi. Jika Anda memiliki pertanyaan jangan segan untuk menambahkan pertanyaan Anda di Blog ini. Selamat mencoba!