透過run-avrdude燒錄Arduino Yun

由於不小心在上一支程式用太多記憶體(接近99%)
造成Arduino Yun無法透過IDE Upload程式了
原本打算用 Arduino as ISP方式用另外一台Arduino Yun來燒錄.
但是試不出來.

後來在論壇上( https://forum.arduino.cc/index.php?topic=355657.0 )看到可以用run-avrdude來進行燒錄
因此就先用Blink建立最簡單的hex後,
再把檔案傳到Arduino上.
接著ssh進去yun後,透過下列指令進行燒錄

merge-sketch-with-bootloader.lua Blink.ino.hex
run-avrdude Blink.ino.hex

如果只是單純使用run-avrdude,也是可以燒錄.
但是IDE依然無法燒錄.
後來用merge-sketch-with-bootloader.lua對hex檔案天加入了bootloader後.
就可以讓IDE燒錄了.

install docker 18.06 on raspberry pi

最近在raspberry pi上面安裝docker 18.09後,
會發生無法啟動docker的問題.
因此需要降版至18.06,語法如下:

sudo apt-mark unhold docker-ce
sudo apt-get purge -y docker-ce
sudo apt-get autoremove -y --purge docker-ce
sudo apt-get autoclean
sudo rm -rf /var/lib/docker
export VERSION=18.06 && curl -sSL get.docker.com | sh
sudo apt-mark hold docker-ce

raspberry pi 關閉7寸觸控螢幕的方法

關閉:

sudo sh -c 'echo 1 > /sys/class/backlight/rpi_backlight/bl_power'

開啟:

sudo sh -c 'echo 0 > /sys/class/backlight/rpi_backlight/bl_power'

切換:

if [ "$(cat /sys/class/backlight/rpi_backlight/bl_power)" -eq "0" ]; then \
  sudo sh -c "echo 1 > /sys/class/backlight/rpi_backlight/bl_power"; \
else \
  sudo sh -c "echo 0 > /sys/class/backlight/rpi_backlight/bl_power"; fi

使用google map geolocation api對raspberry pi進行地理定位

下面範例使用了Google Map GeoLocation Api對raspberry pi進行地理定位,
其中key可在https://console.developers.google.com申請,每日免費額度是2500(每100秒限制10000次)

/*
npm i pi-wifi google-geolocation
node main.js
*/
function geolocation(callback){
  var geolocation = require ('google-geolocation') ({
    key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
  });
  var piWifi = require('pi-wifi');

  piWifi.scan(function(err, networks) {
    if (err) {
      return console.error(err.message);
    }
    //console.log(networks);

    var items=[];
    for(i in networks){
      items.push({
        'macAddress': networks[i].bssid,
        'signalStrength': networks[i].signalLevel,
      });
    }

    var params={
      wifiAccessPoints: items,
    };

    geolocation (params, (err, data) => {
      if (err) {
        return;
      }

      var result={
        'lat': data.location.lat,
        'lng': data.location.lng,
        'accuracy': data.accuracy,
        'type': 'wifi',
      };

      if(callback &&  typeof(callback) == "function")
        callback(result);
    });
  });
}

geolocation(function(location){
  console.log(location);
  var url ="https://www.google.com.tw/maps/search/"+location.lat+","+location.lng;
  console.log(url);
});

install nodejs 6 on raspberry pi

armv6的raspberry pi似乎無法直接用apt-get install方式安裝.
所以改用下列語法安裝

wget http://nodejs.org/dist/v6.9.5/node-v6.9.5-linux-armv6l.tar.gz && \
tar -xzf node-v6.9.5-linux-armv6l.tar.gz && \
mv node-v6.9.5-linux-armv6l nodejs && \
rm node-v6.9.5-linux-armv6l.tar.gz && \
cp -R * /usr/local/ && \
rm -r -f nodejs && \
ln -s /usr/local/nodejs/bin/node /usr/bin/node && \
ln -s /usr/local/nodejs/bin/npm /usr/bin/npm

raspberry wifi設定

修改/etc/wpa_supplicant/wpa_supplicant.conf

sudo vim /etc/wpa_supplicant/wpa_supplicant.conf

輸入wifi ap資訊

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev 
update_config=1 
country=TW 
network={ 
  ssid = "wifi_ap_ssidname"
  psk =  "wifi_ap_password"
  key_mgmt=WPA-PSK 
}

存檔,重開機既可

解決docker在raspberry pi上出現 cgroups: memory cgroup not supported on this system 之錯誤

目前 raspberry pi 2017-11-29-raspbian-stretch 跟 docker 17.11.0會出現 cgroups: memory cgroup not supported on this system 之錯誤
所以暫時解決的辦法是將docker降到17.09.0

sudo apt-get remove -y docker-ce
sudo apt install -y docker-ce=17.09.0~ce-0~raspbian
sudo apt-mark hold docker-ce

等之後問題解決了就可以用下列指令解鎖,並升級

sudo apt-mark unhold docker-ce
sudo apt-get upgrade -y

參考出處

install docker on raspberry pi zero w

在raspberry pi上安裝好NOOBS,
可透過下列指令直接安裝docker(ps: sudo預設也不需要密碼)

curl -sSL https://get.docker.com | sh

接著將pi使用者加入docker群組
可透過下列指令直接安裝docker(ps: sudo預設也不需要密碼)

sudo usermod -aG docker pi

最後重新登入就可以用docker了

nikon d600 快門線腳位

快門線腳位
pin1是7V電源
pin2是GND
pin6是GPS訊號(UART之RX)
pin7與pin8以及pin2短路時是照相
pin8與pin2短路時是對焦

轉換到mini usb後對應的腳位
VBus是7V
GND是接地
D-是GPS訊號(UART之RX)
D+與IO以及GND短路時是照相
ID與GND短路時是對焦