<!--?php // A sample PHP Script to POST data using cURL // Data in JSON format $json= '[{"name":"Temperature","type":"numeric"},{"name":"LEDOn","type":"bool"}]'; $arr=json_decode($json, false); echo ' <pre-->'; print_r($arr); echo ' '; $employee_object = new stdClass; $employee_object->name = "Temperature"; $employee_object->type = "numeric"; $employee_object1 = new stdClass; $employee_object1->name = "LEDOn"; $employee_object1->type = "bool"; $data = array ( $employee_object, $employee_object1 ); $payload = json_encode($data); echo "==>".$payload; $token = '2HSmdfzsEAXB3puVUTi6ZoirV'; // Prepare new cURL resource $ch = curl_init('https://cloud4rpi.io/api/devices/'.$token.'/config'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLINFO_HEADER_OUT, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); // Set HTTP Header for POST request curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($payload)) ); // Submit the POST request $result = curl_exec($ch); echo $result; // Close cURL session handle curl_close($ch); $json = '{"ts":"date","payload":{"Temperature":24,"LEDOn":true}}'; $arr=json_decode($json, true); echo ' <pre>'; print_r($arr); echo '</pre> '; $dt = date(DateTime::ISO8601); $carss = array ( "ts"=>$dt, "payload"=>array("Temperature"=>22,"LEDOn"=>0) ); $payload = json_encode($carss); echo "==>".$payload; $token = '2HSmdfzsEAXB3puVUTi6ZoirV'; // Prepare new cURL resource $ch = curl_init('https://cloud4rpi.io/api/devices/'.$token.'/data'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLINFO_HEADER_OUT, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); // Set HTTP Header for POST request curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($payload)) ); // Submit the POST request $result = curl_exec($ch); echo $result; // Close cURL session handle curl_close($ch); ?>
Kategori: Embedded
Setting printer USB di Raspberry Pi
sudo chown www-data:www-data etc
sudo chmod 775 etc
sudo chown www-data:www-data /dev/usb/lp0
source:
https://www.howtogeek.com/169679/how-to-add-a-printer-to-your-raspberry-pi-or-other-linux-computer/
https://kernelmastery.com/enable-regular-users-to-add-printers-to-cups/
https://maker.pro/raspberry-pi/projects/how-to-turn-a-usb-printer-into-a-wireless-printer-with-raspberry-pi-zero-w
Membuat Daemon di Raspberry Pi
Buka terminal lalu ketik:
hciconfig hcitool scan
Nama perangkat biasanya bernama: hci0
Misalkan hasilnya adalah:
66:12:13:EE:D1:76 Bluetooth Printer
Test printer dengan perintah:
sudo rfcomm bind /dev/rfcomm0 66:12:13:EE:D1:76 1 echo “Test” > /dev/rfcomm0
Jika printer berhasil mencetak maka koneksi sudah berhasil
Selanjutnya tambahkan file untuk daemon service
sudo leafpad /etc/systemd/system/rfcomm.service
Ketik kode berikut dan simpan:
[Unit] Description=RFCOMM service After=bluetooth.service Requires=bluetooth.service [Service] ExecStart=/usr/bin/rfcomm bind hci0 66:12:13:EE:D1:76 1 [Install] WantedBy=multi-user.target
Ganti nama hci0 dengan nama hasil hciconfig dan ganti 66:12:13:EE:D1:76 dengan hasil hcitool scan
Aktifkan daemon, ubah preferensi printer dan booting
sudo systemctl enable rfcomm sudo systemctl start rfcomm Sudo reboot
Menambahkan RTC pada Raspberry Pi 3
Setting antarmuka I2C
sudo apt-get install -y python-smbus
sudo apt-get install -y i2c-tools
sudo raspi-config
Pilih Interfacing Option > I2C > Enable lanjutkan dengan booting. Selanjutnya test koneksi dengan perintah i2cdetect untuk antaruka I2C 1. (Cek juga antarmuka ke 0 jika perlu)
sudo i2cdetect -y 1 #isikan angka 1 bila mengunakan I2C1, isikan 0 bila menggunakan I2C 0

Setting RTC
sudo modprobe rtc-ds1307 #load rtc ke kernel
sudo bash #masuk ke super user
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device #tambahkan device ds1307 di alamat 0x68 ke I2C1
exit #keluar dari super user
sudo hwclock -r #baca waktu dari RTC
sudo hwclock -w #tulis RTC berdasarkan sistem
Set agar waktu yang digunakan menggunakan RTC
sudo nano /etc/modules #agar modul rtc-ds1307 diload
#tambahkan baris berikut:
i2c-bcm2708
rtc-ds1307
sudo nano sudo nano /etc/rc.local #agar dijalankan saat booting
#tambahkan baris berikut sebelum exit 0:
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device #tambahkan device ds1307 di alamat 0x68 ke I2C1
sudo hwclock -s #set waktu yang digunkan adalah RTC
date #baca waktu saat ini dari RTC
Sumber:
Memprogram 24LC64 dengan Port Serial
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; namespace _24LC64 { /// <summary> /// Pin 3 (TX) -- -- CS /// pin 4 (DTR) -- SCL -- SCK /// Pin 6 (DSR) -- SDA IN -- /// Pin 7 (RTS) -- SDA OUT -- MOSI (DO) /// Pin 8 (CTS) -- -- MISO (DI) /// </summary> public partial class Form1 : Form { public const bool H = true, L = false; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { serialPort1.BaudRate = 9600; serialPort1.PortName = textBox1.Text; serialPort1.Open(); //serialPort1.DtrEnable = true; //serialPort1.RtsEnable = true; //perintah Write StartBit(); kirim(0xA0); bit(1); //ACK //Alamat memory (0x001) //0x00 kirim(0x00); bit(1); //ACK //0x01 kirim(0x01); bit(1); //ACK //Data (0x33) //kirim(0x33); byte[] data = StringToByteArray(textBox2.Text); kirim(data[0]); bit(1); //ACK StopBit(); serialPort1.Close(); } void kirim(int byteData) { for (int i = 7; i >= 0; i--) { int bitData = (byteData >> i & 0x01); bit(bitData); } } void StartBit() { SDA(H); SCL(H); Thread.Sleep(1); SDA(L); SCL(H); Thread.Sleep(1); } void StopBit() { SDA(L); SCL(H); Thread.Sleep(1); SDA(H); SCL(H); Thread.Sleep(1); } void bit(int val) { SCL(L); if (val == 0) SDA(L); else SDA(H); SCL(H); Thread.Sleep(1); SCL(L); SDA(H); Thread.Sleep(1); } void SCL(bool status) { serialPort1.DtrEnable = status; } void SDA(bool status) { serialPort1.RtsEnable = status; } int bacaBit() { int bitData = 0; SCL(L); SCL(H); bool bit = serialPort1.DsrHolding; if (bit == true) bitData = 1; Thread.Sleep(1); SCL(L); SDA(H); Thread.Sleep(1); return bitData; } public static byte[] StringToByteArray(string hex) { return Enumerable.Range(0, hex.Length) .Where(x => x % 2 == 0) .Select(x => Convert.ToByte(hex.Substring(x, 2), 16)) .ToArray(); } private void button2_Click(object sender, EventArgs e) { serialPort1.BaudRate = 9600; serialPort1.PortName = textBox1.Text; serialPort1.Open(); //perintah Write StartBit(); kirim(0xA0); bit(1); //ACK //Alamat memory (0x001) //0x00 kirim(0x00); bit(1); //ACK //0x01 kirim(0x01); bit(1); //ACK //perintah Read kirim(0xA1); bit(1); //ACK int data = 0; for (int i = 7; i >= 0; i--) { data = data << 1; data = data | bacaBit(); } bit(1); //ACK StopBit(); serialPort1.Close(); byte[] hasil = new byte[1]; hasil[0] = (byte)data; textBox2.Text = BitConverter.ToString(hasil); } } }
Terlindungi: Proteksi firmware ATmega dengan Nomor Seri
Menambahkan autorun pada linux raspberry
buka direktori ~/config/autostart, buat jika belum ada dengan mkdir
buat file berektensi .desktop, misalnya chrome.desktop
lalu isikan script berikut
[Desktop Entry] Type=Application Name=Clock [Desktop Entry] Type=Application Name=Clock Exec=chromium-browser --kiosk --app=http://localhost/
Chrome akan berjalan setelah GUI terbuka, fullscreen tanpa notifikasi dengan sempurna. Namun jika ingin autorun saat booting, maka gunakan cara berikut:
sudo leafpad /etc/rc.local
sebelum bagian exit 0 tambahkan kode berikut:
python /home/pi/blink.py &
Penting: Ampersand (&) dibutuhkan agar proses autorun tidak memblokir proses yang lain, dangan kata lain proses yang lain juga akan terbuka walaupun proses autorun ini belum sepenuhnya selesai. Jika tanpa tanda ampersand, maka proses autorun ini akan ditunggu hingga selesai baru proses lain dibuka. Akan menjadi masalah jika pada proses ini loop, maka tidak akan pernah bisa login.
Untuk menghentikan proses loop pada autorun, gunakan:
sudo ps -ax | grep python sudo kill <PID>
ganti <PID> dengan nomor proses. Hati hati jangan keliru, komputer bisa hang!
sumber: https://learn.sparkfun.com/tutorials/how-to-run-a-raspberry-pi-program-on-startup/all
Mengaktifkan CGI pada Apache
Konfigurasi apache pada linux ada di direktori /etc/apache2. Konfigurasi CGI dapat ditemukan di /etc/apache2/conf-available/serve-cgi-bin.conf yang merupakan symbolic link dari /etc/apache2/conf-enabled/serve-cgi-bin.conf. Terdapat bagian yang memetakan /cgi-bin pada URL ke direktori /usr/lib/cgi-bin/ dan memungkinkan untuk mengeksekusi CGI pada direktori ini.
Ganti bagian /cgi-bin/ menjadi path URL untuk CGI dan ganti /usr/lib/cgi-bin untuk disesuaikan pada direktori tempat menyimpan script CGI:
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin">
Modul yang sudah terpasang pada Apache dapat ditemukan di direktori /etc/apache2/mods-available. Script untuk menjalankan CGI ada di script pada file cgi.load
Untuk mengaktifkan modul ini, buat symbolic link pada /etc/apache2/mods-enabled, karena modul CGI secara default tidak aktif.
$ cd /etc/apache2/mods-enabled $ sudo ln -s ../mods-available/cgi.load
Load kembali konfigurasi Apache dengan:
$ sudo service apache2 reload
source: https://code-maven.com/set-up-cgi-with-apache
Aktifkan Webserver pada Raspberry
Pemasangan Apache
sudo apt update sudo apt upgrade sudo apt update sudo apt install apache2 sudo chown -R pi:www-data /var/www/html/ sudo chmod -R 770 /var/www/html/
Cek hasilnya di localhost (127.0.0.1)
Pemasangan PHP
sudo apt install php php-mbstring sudo rm /var/www/html/index.html echo "<?php phpinfo ();?>" > /var/www/html/index.php
Pemasangan MySQL
sudo apt install mysql-server php-mysql sudo mysql --user=root
Buat user baru dengan perintah (ganti password dengan kata kunci yang baru):
DROP USER 'root'@'localhost'; CREATE USER 'root'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'password';
Selanjutnya untuk masuk ke client gunakan mysql --user=root --password
lalu isikan kata kunci yang baru.
Pemasangan PHPMyAdmin
sudo apt install phpmyadmin
Saat pada proses dbconfig-common
ada pertanyaan untuk setting database. Cukup pilih <Tidak> karena telah dikonfigurasi saat pemasangan MySQL. Isikan kata kunci sesuai saat setting MySQL. Buka alamat localhost diikuti phpmyadmin, contoh: http://127.0.0.1/phpmyadmin
Kadang phpmyadmin tidak berada pada /var/www/html/ maka perlu buat link. Misalnya:
sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
Setelah berhasil masuk ke phpmyadmin, buat data default dan cek warning dan errornya.
Belajar membuat robot berkaki 4 – quadruped
- Rangkai rangka robot dengan motor servo, jangan pasang shaft-nya
- Pasangkan motor servo ke pin 2 s.d 13 Arduino
- Putar motor servo ke 90 derajat dengan script berikut:
- Pasangkan rangkanya dengan membentuk robot yang sedang berdiri dan kencangkan sekrup
- Upload skrip berikut ke arduino: