Category: プチ情報

・楽天モバイル 基地局 横須賀市 にて

◆昨年の9月より楽天モバイルに変えたので散歩がてら基地局を探してみた。
 
 2021年3月30日 時点

①久里浜のヤマダ電機屋上

1-1

1-2


②京急久里浜駅前のビル屋上
2-1

2-2


③ハイランドコンクリート柱
3-1

3-3


④久里浜のマンション屋上
4-1


⑤舟倉のマンション屋上
5-1

5-2

5-3


⑥佐原の工場の屋上(ニトリ前)
6-1

6-2

6-3


⑦佐原のホテル屋上
7-1

7-2


⑧根岸のビル屋上(セブンイレブン前)
8-1

8-2


⑨大津小学校前コンクリート柱
9-1

9-2


⑩吾郎橋ガソリンスタンド横コンクリート柱
10-2
10-1


11.堀之内コンクリート柱
11-1


12.堀之内ヤマダ電機屋上
12-1

12-2



13.桜が丘コンクリート柱
13-1

13-2


14.馬堀海岸コンクリート柱
14-0

14-1

14-2


15.光風台コンクリート柱
15-2

15-1

15-3


16.久里浜カインズ駐車場コンクリート柱
16-1

16-2


・「スマホdeレグザ」 DBR-M4008 V6プラス 宅外視聴 について

◆レグザタイムシフトマシン:DBR-M3009(8THDD換装後DBR-M4008となる)
 で中々宅外で視聴できなかったが、まさかのDBR-M4008の電源OFFからの再起動で
 繋がるようになった。

◆繋がらないときは、IPv4のPPPoEに戻すことも検討したが、再起動後IPv6のIPoE(V6プラス)の
 環境で繋がり宅外で視聴できた。

①楽天モバイルのアンドロイドスマホでの写真

a1

a2

a3

a4

 著作権の関係でボカシてあります。
a5



②①のスマホでテザリングしiPadでの写真

i1

i2

i3

 著作権の関係でボカシてあります。
i4


・aitendo 2021福袋(マイコン)が到着

◆結構遊べそうな部品達でした。

2021-0


◆遊ぶために入っていた物の仕様などをaitendoのサイトで調べてみました。

◆下記の三つがサイトで確認できなかった。

S__45162506

◆あと下記の三つのLEDも型番が探せなかった。
S__45162507



◆残りのは、サイトでのリンクを確認出来ました。
 但し、2,3は、似たような仕様でドンピシャではないですが
 製作するうえで参考となるものです。

■下記のzipファイルをダウンロード/解凍すると各部品毎にリンクへ飛べます。
2021福袋(マイコン).zip


2021-1




SoftBank Air ターミナルを WiFi AP としての活用方法

◆オークションやメルカリ等で安く買えるソフトバンクAirターミナルを
 無線LAN(WiFi)のアクセスポイントとしての活用方法

◆ESP32、スマホ、タブレット等で色々とWiFi接続していると、市販のアクセスポイントでは満杯になります。

◆そこで目を付けたのがオークションやメルカリ等で安く買えて(送料込みで1000円程度)
 WiFiクライアント最大接続数64台と、アクセスポイントとして割と優秀なAirターミナルです。

◆ターミナルの年代によって下記のような違いがあります。
 出来れば、スピードの速いAir4を手に入れたいところです。
 でもスピードが必要なければ、Air4より安価な3,2でも良いでしょう。

写真(00) Airターミナル仕様比較

air00

写真(01) Air2,3,4 サイズの違い
air001

写真(02) Air2,3,4 型番の違い
air234



これから、ただのWiFiアクセスポイントにする為の(裏技)おまじないを紹介します。
◆下記は、Air4での実施例です。なおAir3,2でもおまじないは同様に確認出来ています。

⓪まず、ACアダプタを繋ぎ、電源をいれます。
写真(01) ステータスLEDが点灯します。
air01
 
写真(02) SIMが入っているようでしたらLTEが赤く点灯します。
air02

写真(03) 赤色点灯は気分悪いので底面にあるSIMを抜きます。
air03

写真(04)   赤が滅灯し、Wi-FiとPowerの緑だけが 表示されます。
air04

①次に、スマホでもPCでも何でもいいので、AirターミナルとWiFi接続します。
 SSID,暗号キーは、底面に記載の物です。

 URLは「192.168.3.1」又は「172.16.255.254」と打ち込みます。
 そうすると、Airターミナルの管理画面へログインできます。

写真(10)「172.16.255.254」の例
air10

写真(11)「192.168.3.1」の例
air11


②WiFiのSSID、暗号キーの変更
 変更しないのであれば、③へスキップ

写真(12)「WiFi(無線LAN)の設定」でWiFiのSSIDと暗号キーを変えます。
air12



写真(13) 初期ID・パスワードを聞いてきます。
     ◆初期ID・パスワードは「user」です。
air13



写真(21)「暗号化設定」を開きます。
air21


写真(22) 現在の設定内容を確認できます。
air22



写真(23) SSIDを変更入力します。
air23



写真(24) 暗号キーを変更入力し、設定を保存します。 
air24


写真(25) 保存しますと再起動を聞いてきますが、ここではトップページに戻ります。 
air25



③ネットワークの設定の変更

写真(30)「ネットワークの設定」を開きます。(ここからがおまじないのポイントです。)

air30



写真(31) 現在の設定内容を確認できます。
        すると、「IPアドレス/DHCPサーバーの設定」が出てくるので、
       「本機器IPアドレス/サブネットマスク」を見てください。
        先ほどログインしたIPアドレスの「192.168.3.1」
         ◆DHCPの開始IP「2」と終了IP「254」になっているはずです。
air31



写真(32) DHCPの開始IPと終了IPをそれぞれ「1」に設定し、設定を保存します。
air32


写真(33) 保存しますと再起動を聞いてきますが、ここではトップページに戻ります。 
air341


写真(34) 本機に、ルーターからのLANケーブルを接続します。
    LANポートが二個ありますが、どちらでもOKです。
air33

写真(35)  LANポートは、2口のハブとしても使えます。

air332


写真(34) 最後に再起動をします。
     そうすると、おまじないが効いて、Airターミナルはブリッジして、
     ただのWiFiアクセスポイントになります。
air34


写真(41) 端末で先ほどのSSID,PWで繋いでみます。
air41


写真(42) めでたく、ルーターからのIPが振られてインターネットに繋がります。
air42


写真(51)「注意」Airターミナルはブリッジ状態になったので、「192.168.3.1」を入力しても
管理画面へのログインはできなくなっています。
最初から、やり直すには、底面のリセットを長押しして、工場出荷時に戻します。

air51

以上で安価なアクセスポイントの誕生です。めでたし、めでたし。

下記のコードはGoogle code-prettifyを使ってコードを読みやすくしています。

console.log('Hello World')

※CDNから下記ファイルを読み込んでいます。
<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>

行番号を表示



//#define LED 13 //Arduino uno
//#define LED 1  //Attiny85
#define LED 2  //ESP32Devkit / ESP8266 LOLIN D1 mini
//#define LED 22  //WEMOS LOLIN32 Lite

void setup() {
  // put your setup code here, to run once:
  pinMode(LED, OUTPUT);
  
  Serial.begin(115200);
  Serial.println("Program Start");
  for(int i=0;i<10 ;i++) {
    digitalWrite(LED,HIGH);
    delay(200); 
    digitalWrite(LED,LOW);
    delay(200); 
  }

}

void loop() {
  digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
  Serial.println("LED On");
  delay(1000);               // wait for a second
  digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
  Serial.println("LED Off");
  delay(1000);               // wait for a second
}


・docomo d-01G 電源 が 入らない ジャンク品を入手したので 分解 してみた

◆本体

S__44081218

S__44081216


①下側切り込みにヘラを挿しパネルを開ける

S__44081215


②写真の赤丸のビスを外す。

d01g-01


③上側も同様にパネルを外す。
④写真の赤丸のビスを外す。

d01g-02


⑤液晶の側面にヘラ又は小さいマイナスドライバーなど挿し、
 少しずつ抉って全周のツメを外す。

S__44081212


⑥中のフラットケーブルに気を付けて開ける。

S__44081211


⑦内部の写真


S__44081209

S__44081208


S__44081207

S__44081205


◆電源スイッチ部分

S__44081210

S__44081229


d01g-10


◆パネル部分の分解
①コネクタの外し方

d01g-20


②特殊ビスの位置赤丸部のを外す

d01g-21


③押さえを外した所

d01g-22


④液晶とタッチパネルを分解した所

d01g-23

d01g-24



色々やった結果
◆別のジャンクを入手し、電源スイッチ部分だけを交換したが変化なし。
◆一台は、タッチパネルの不具合だったので分解し、交換した。
◆他のも組み立ててみたら、どういうわけか両方とも治った。


・車の OBDⅡ 端子に ELM327 を繋いでみた。 *説明等はネットよりのコピペです。

◆OBD-II とは?

オン・ボード・ダイアグノーシス(On-board diagnostics; OBD)とは、自動車各部に取り付けられたECU(Electrical Controll Unit)にプログラミングされている自己診断機能である。
On-Board Diagnosticsの頭文字を取って、OBDと略称されている。

1996年以降、アメリカで販売する自動車に取り付けを義務付けられた車両診断を行うための通信、コネクタ規格です。

日本では、2002年ごろから OBD-II コネクタが採用され始め、新型車は2008年、販売継続車は2010年から OBD-II の搭載が義務付けられました。

なお、欧州では2001年から搭載義務化。中国では2006年12月から、韓国では2007年1月から、OBDコネクタがついていない車の販売が禁止されています。

ただし、コネクタが OBD-II でも、さまざまな通信プロトコルがあり、メーカーが独自に採用する通信プロトコルもあるため OBD-II コネクタがあっても、 全ての自動車で同じ機器が使えるわけではありません。

◆取得できる情報(参考)
・回転数[rpm]
・速度[km/h]
・瞬間燃費[m/μℓ]
・水温[℃]
・スロットルポジション
・累積走行距離[m]
・累積燃料消費量[ml]
・燃料カット走行距離[m]
・エコドライブ時間[s]
・走行距離[m]
・最高速度[km/h]
・平均速度[km/h]
・最高回転数[rpm]
・アイドリングストップ時間[s]
・アイドリング時間[s]
・エコスタート回数
・発進停止回数
・燃料消費量[ml]
・走行時間[s]
など


◆下記は、コネクタのピンアサインです。

odb2-pin2

odb2-pin3


◆ELM327とは?
ELM327は、ELM Electronicsというカナダの会社が作ったOBD-IIの通信を簡単に行えるICチップです。 このICチップを搭載した機器が様々な所から発売されています。


今回、下記の製品をアマゾンにて入手しました。
https://www.amazon.co.jp/gp/product/B07RNHZS44/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1

odb-01


◆フタを開けた時の写真

odb-02


◆横から見た写真

odb-03


◆電源12Vに繋いだ時の電流

odb-04


◆コネクタに直刺しするとバッテリーに直結状態となり、車を使っていないときでも
 消費し続け、バッテリーが上がる可能性があります。
 これを防ぐため、アクセサリー電源よりの給電となるよう分岐ケーブルをアマゾンで
 入手し改造しました。
 ■オスコネクタ16番からの配線を切断し、メス側にシュガーライタプラグよりの12Vの
  線を接続しました。

https://www.amazon.co.jp/gp/product/B015CCIDRC/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1


odb-05


◆車(マツダ フレアワゴン)
 ダッシュボート ハンドル左下についていたコネクタ部 写真

odb-11


◆仮に接続した時の写真 (実際は分岐ケーブル経由)

odb-12

◆分岐ケーブル経由での最終設置写真

odb-13


◆IOS版は、WiFi版が必要とのことです。
◆アンドロイド版ODBⅡのソフト
◆Bluetooth対応で、Android端末やPCと接続可能ソフト
 Torque、OBD Info-san!、OBD Driver、Car Gauge、Leaf Spy(e-powerはNG)で動作確認されているみたいです。
 この中の下記の三つを試してみました。

1.Torque
詳しくは、下記URLを参照して下さい。
[今話題]無料自動車アプリ「Torque(トルク)」とは?


odb-21


odb-22

◆ここで、ちょっと走行テストの動画を紹介します。(先人の方)
超小型 OBDⅡ ELM327 取り付け&Torque走行テスト(4分15秒)



2.OBD Info-san! トライアル版(8分間しか使えない) 製品版は、580円
詳しくは、下記URLを参照して下さい。
OBD Info-san! for Android


odb-24

3.OBD Driver
詳しくは、下記URLを参照して下さい。
車愛好者向けの追加メーターアプリ、「OBD Driver Free」無料配布開始


odb-25


◆この製品は、技適が通っていないのではと、推測されます。
 よって、下記のURLを参照して、技適に対応改造するのも良いかと思います。


ELM327技適対応

OBD2の車両情報を活用、スマートフォンアプリケーション用SDKを公開|カーメイト

技適未取得機器の申請がこんなにカンタンに! マイナンバーカードさえあればスグに実験OK UDM米国版で試してみた

技適なしの海外無線デバイスが国内で気軽に試せる時代到来


以上



・最新版 ラズパイOS Raspberry Pi OS 2020/05/27



・Raspberry Pi Imager Toolを使用してSDカードに書き込みます。





・旧バージョンのダウンロードURL

HTTP

こちらでも3種類は場所が異なります。

with desktop and recommended software(いわゆるフルver)
https://downloads.raspberrypi.org/raspbian_full/images/

with desktop(いわゆる通常ver)

https://downloads.raspberrypi.org/raspbian/images/

Lite
https://downloads.raspberrypi.org/raspbian_lite/images/

FTP

FTPは国内にあるミラーサイトだから速いです。中身は同じです。

with desktop and recommended software
http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian_full/images/

with desktop
http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/

Lite
http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian_lite/images/


・Raspi に BME280 温湿度気圧センサーを付けて alexa に 室温 を喋らせてみました。

 2020/5/17現在のものです。
色々とネットで先人の方達のお知恵をお借りしてやっとできました。
ありがとうございます。プログラムなどは、自己責任でお使いください。





参考URL
Raspberry Pi で温湿度気圧センサを使う
https://qiita.com/yukataoka/items/8f9046587c978e91f689

Alexaに部屋の温度と湿度を教えてもらう



P1
スライド1

P2
スライド2

P3
スライド3

P4
スライド4

P5
スライド5


◆I2C(BME280)関係は、下記URLを参照してセットアップします。

Raspberry Pi で温湿度気圧センサを使う
https://qiita.com/yukataoka/items/8f9046587c978e91f689


P6
スライド6

◆簡易HTTPサーバーコード(~/app/alexa/server.py)
#############################################################
import http.server
server_address = ("", 8000)
handler_class = http.server.CGIHTTPRequestHandler #ハンドラを設定
simple_server = http.server.HTTPServer(server_address, handler_class)
simple_server.serve_forever()

◆indexファイル(~/app/alexa/index.html)
#############################################################
<html>
<body>
  Hello Raspi HTTPServer.
</body>
</html>


P7
スライド7

◆Alexaスキルの応答コード (~/app/alexa/cgi-bin/bme280web.py)
#############################################################
#!/usr/bin/python3
# -*- coding: utf-8 -*-

from smbus2 import SMBus
import time
import json

class Bme280:

    def __init__(self, busNumber=1, i2cAddress=0x76):

        self.bus = SMBus(busNumber)
        self.i2cAddress = i2cAddress
        self.digT = []
        self.digP = []
        self.digH = []
        self.timeFine = 0.0
        self.presRaw  = 0.0
        self.tempRaw  = 0.0
        self.humRaw   = 0.0

        osrsT   = 1         #Temperature oversampling x 1
        osrsP   = 1         #Pressure oversampling x 1
        osrsH   = 1         #Humidity oversampling x 1
        mode    = 3         #Normal mode
        tSb     = 5         #Tstandby 1000ms
        filter  = 0         #Filter off
        spi3wEn = 0         #3-wire SPI Disable

        ctrlMeasReg = (osrsT << 5) | (osrsP << 2) | mode
        configReg   = (tSb << 5) | (filter << 2) | spi3wEn
        ctrlHumReg  = osrsH

        self.writeReg(0xF2,ctrlHumReg)
        self.writeReg(0xF4,ctrlMeasReg)
        self.writeReg(0xF5,configReg)
        self.getCalibParam()

        self.readData()

    def writeReg(self, regAddress, data):
        self.bus.write_byte_data(self.i2cAddress, regAddress, data)

    def getCalibParam(self):
        calib = []

        for i in range (0x88,0x88+24):
            calib.append(self.bus.read_byte_data(self.i2cAddress,i))
        calib.append(self.bus.read_byte_data(self.i2cAddress,0xA1))
        for i in range (0xE1,0xE1+7):
            calib.append(self.bus.read_byte_data(self.i2cAddress,i))

        self.digT.append((calib[1] << 8) | calib[0])
        self.digT.append((calib[3] << 8) | calib[2])
        self.digT.append((calib[5] << 8) | calib[4])
        self.digP.append((calib[7] << 8) | calib[6])
        self.digP.append((calib[9] << 8) | calib[8])
        self.digP.append((calib[11]<< 8) | calib[10])
        self.digP.append((calib[13]<< 8) | calib[12])
        self.digP.append((calib[15]<< 8) | calib[14])
        self.digP.append((calib[17]<< 8) | calib[16])
        self.digP.append((calib[19]<< 8) | calib[18])
        self.digP.append((calib[21]<< 8) | calib[20])
        self.digP.append((calib[23]<< 8) | calib[22])
        self.digH.append( calib[24] )
        self.digH.append((calib[26]<< 8) | calib[25])
        self.digH.append( calib[27] )
        self.digH.append((calib[28]<< 4) | (0x0F & calib[29]))
        self.digH.append((calib[30]<< 4) | ((calib[29] >> 4) & 0x0F))
        self.digH.append( calib[31] )

        for i in range(1,2):
            if self.digT[i] & 0x8000:
                self.digT[i] = (-self.digT[i] ^ 0xFFFF) + 1

        for i in range(1,8):
            if self.digP[i] & 0x8000:
                self.digP[i] = (-self.digP[i] ^ 0xFFFF) + 1

        for i in range(0,6):
            if self.digH[i] & 0x8000:
                self.digH[i] = (-self.digH[i] ^ 0xFFFF) + 1  

    def readData(self):
        data = []
        for i in range (0xF7, 0xF7+8):
            data.append(self.bus.read_byte_data(self.i2cAddress,i))
        self.presRaw = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4)
        self.tempRaw = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4)
        self.humRaw  = (data[6] << 8)  |  data[7]

    def getPressure(self):
        pressure = 0.0

        v1 = (self.timeFine / 2.0) - 64000.0
        v2 = (((v1 / 4.0) * (v1 / 4.0)) / 2048) * self.digP[5]
        v2 = v2 + ((v1 * self.digP[4]) * 2.0)
        v2 = (v2 / 4.0) + (self.digP[3] * 65536.0)
        v1 = (((self.digP[2] * (((v1 / 4.0) * (v1 / 4.0)) / 8192)) / 8)  + ((self.digP[1] * v1) / 2.0)) / 262144
        v1 = ((32768 + v1) * self.digP[0]) / 32768

        if v1 == 0:
            return 0
        pressure = ((1048576 - self.presRaw) - (v2 / 4096)) * 3125
        if pressure < 0x80000000:
            pressure = (pressure * 2.0) / v1
        else:
            pressure = (pressure / v1) * 2
        v1 = (self.digP[8] * (((pressure / 8.0) * (pressure / 8.0)) / 8192.0)) / 4096
        v2 = ((pressure / 4.0) * self.digP[7]) / 8192.0
        pressure = pressure + ((v1 + v2 + self.digP[6]) / 16.0)
        return pressure/100

    def getTemperature(self):
        v1 = (self.tempRaw / 16384.0 - self.digT[0] / 1024.0) * self.digT[1]
        v2 = (self.tempRaw / 131072.0 - self.digT[0] / 8192.0) * (self.tempRaw / 131072.0 - self.digT[0] / 8192.0) * self.digT[2]
        self.timeFine = v1 + v2
        temperature = self.timeFine / 5120.0
        return temperature

    def getHumidity(self):
        varH = self.timeFine - 76800.0
        if varH != 0:
            varH = (self.humRaw - (self.digH[3] * 64.0 + self.digH[4]/16384.0 * varH)) * (self.digH[1] / 65536.0 * (1.0 + self.digH[5] / 67108864.0 * varH * (1.0 + self.digH[2] / 67108864.0 * varH)))
        else:
            return 0
        varH = varH * (1.0 - self.digH[0] * varH / 524288.0)
        if varH > 100.0:
            varH = 100.0
        elif varH < 0.0:
            varH = 0.0
        return varH


temp=20
humi=20
pres=1000

sensor = Bme280()
temp=format(sensor.getTemperature(),'.1f')
humi=format(sensor.getHumidity(),'.1f')
pres=sensor.getPressure()

speak = "現在書斎の室温は{0}度。湿度は{1}パーセント。気圧は{2}ヘクトパスカルです。".format(float(temp), float(humi),int(pres))

resp = {
  "version": "1.0",
  "response": {
    "outputSpeech": {
      "ssml": "<speak>" + speak + "</speak>",
      "type": "SSML"
    },
    "speechletResponse": {
      "outputSpeech": {
      "ssml": "<speak>" + speak + "</speak>"
      },
      "shouldEndSession": True
    }
  },
  "sessionAttributes": {}
}

print("Content-type: application/json\n")
print(json.dumps(resp))
#############################################################

P8
スライド8

◆Webサーバーの起動
$ cd /home/pi/app/alexa
$ python3 server.py


◆Linux (ARM)版をインストール
$ wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm.zip
$ unzip ngrok-stable-linux-arm.zip
$ sudo mv ngrok /usr/local/bin/
$ ngrok version
ngrok version 2.2.8

$ ngrok authtoken (自分の認証トークン((authtoken)

◆ngrokで外部に公開します。
$ ngrok http 8000


P9
スライド9

P10

下記URLを参照し、Alexaスキルを作成します。

◆ngrokのダッシュボードで確認して、スキルのエンドポイントに設定する。


Alexaに部屋の温度と湿度を教えてもらう

◆アレクサ スキル開発

◆Alexa公式 動画シリーズ「Alexa道場」


スライド10


P11
スライド11

おしまい


・Windows10Pro X64上 の VMware に macOS 10.15 Catalina のインストールを夢見た。

(注)下記は、すべて夢の中の出来事です。

catalina1015



1.最初に下記URLを参照してMac OS Sierra10.12.4をインストール


2.次に下記URLを参照してSierra10.12.4上でCatalina10.15の
  インストールDISKを作成後、macOS 10.15 Catalinaをインストール
  出来た。


3.2より簡単にインストールする方法

VMWareで「macOS Catalina」 超簡単なインストール手順編



・Windows10で、削除できないフォルダを削除する



◆LinuxでDiskを丸ごとコピーするには
「ddrescue」というコマンドを使う
$ ddrescue -f -d -r1 -v /dev/sda /dev/sdb



◆linuxでSDのボリューム名を変更するには
「e2label」というコマンドを使う
$ sudo e2label /dev/sda1 /boot



◆GUIでのdisk操作
$ sudo apt install gparted gpart


●人感センサー SR501 を使って、ambientにESP32でデータを送っている時、
 人がいないのに検知してしまう事がありました。
 ネットで調べたら、WiFiの電波に反応し、誤検知するみたいとの事。

 よって、センサーをビニルテープで、巻いた後、アルミホイルで巻いて
 電波を遮蔽してみたところ、誤検知が無くなりました。

 S__43491385

sr501誤検知


・raspberry Pi Model 3B 最新版OS 2020-02-05-raspbian-buster-full
  で イーサネットコンバータ を作ってみました。


raspicon

今回のイーサネットコンバータ概要
①raspberry Pi Model 3B
②最新版OS 2020-02-05-raspbian-buster-full.img
③内蔵WiFiをwlan0とする。
④wlan0で、上位WiFiを受け、有線eth0に中継する。
⑤eth0のIPアドレスは、192.168.4.1
⑥DHCPの範囲は、192.168.4.100,192.168.4.200,255.255.255.0,24h
⑦Dnsmesq version 2.80 (dnsmesq -v)
⑧dhcpcd 8.1.2 (dhcpcd --version)

1.ソフトウェアのインストール

 sshしたら、必要なソフトウェアをインストールします。
 以下の順でコマンドを実行。

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install dnsmasq

2.dnsmasqとインストールが終わったら、
 これらのサービスを確認し、起動していたら終了させます。

$ service dhcpcd status
$ service dnsmasq status

$ sudo systemctl stop dnsmasq

3.dhcpの設定

 次に設定ファイルを編集していきます。
 まずはdhcpの設定。

$ sudo nano /etc/dhcpcd.conf

「^w」「^v」で最後の行まで飛び、以下を追加します。

denyinterfaces eth0

 eth0をdhcpの対象から除外します。

「^o」で保存し、「^x」で終了します。

 ではdhcpを再起動させます。

$ sudo service dhcpcd restart


4.dnsmasqの設定

 次はdnsmasqの設定です。
 オリジナルの設定ファイルは、コピーしてバックアップを取っておきます。

$ sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.org
$ sudo nano /etc/dnsmasq.conf

「^w」「^v」で最後の行まで飛び、次の3行を追加します。

server=8.8.8.8
interface=eth0
dhcp-range=192.168.4.100,192.168.4.200,255.255.255.0,24h

dhcp-rangeの設定は、dhcpの時に設定したアドレスと照らし合わせて記入してください。

 同じく「^o」で保存し、「^x」で終了します。

 ここまで来たら、dnsmasqを起動します。

$ sudo systemctl start dnsmasq


起動したことを確認してみます。

$ service dhcpcd status
$ service dnsmasq status

*緑色で active (running) と表示されていればOKです。
 違ってたら、設定ファイルを見直してみて下さい。


5.次に、IP転送の設定をします。

$ sudo nano /etc/sysctl.conf

 次の行を探しコメントを外して保存終了します。

#net.ipv4.ip_forward=1

6.IPマスカレードの設定をします。

 下記コマンドを実行してください。

$ sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
$ sudo iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT  
$ sudo iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT

$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

7.次に、ラズパイが起動後に自動実行するように下記のファイルに追記します。
 *どうしてもeth0に固定IPアドレスを振ることが出来なかったのでここで
  192.168.4.1の固定アドレスを設定しています。
 *他の方法で、設定できた方は、お教えください。

$ sudo nano /etc/rc.local

 一番下にexit 0とあるので、その上に以下の2行を追加します。

sudo ifconfig eth0 192.168.4.1
iptables-restore < /etc/iptables.ipv4.nat

 追加したら保存して終了。

8.これで設定は終わりです。
最後にRaspberryPiを再起動しましょう。

$ sudo reboot

有線LANにケーブルを接続して、インターネットに接続してみましょう。
めでたしめでたし

9.付録 複数の上位WiFiに自動接続させるために
***********************************************************************
WiFi設定ファイル
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

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

network={
        ssid="AP-1"
        psk="12345678"
        key_mgmt=WPA-PSK
        priority=6
}
network={
        ssid="AP-2"
        psk="12345678"
        key_mgmt=WPA-PSK
        priority=5
}
network={
        ssid="AP-3"
        psk="12345678"
        key_mgmt=WPA-PSK
        priority=4
}
network={
        ssid="test-ap"
        psk="12345678"
        key_mgmt=WPA-PSK
        priority=3
}

・raspberry Pi Model 3B+  最新版OS 2020-02-05-raspbian-buster-full
  で ルーター機能付き WiFi中継器 を作ってみました。

raspiwifirep

S__43483159


今回の中継器概要
⓪raspberry Pi Model 3B+
①最新版OS 2020-02-05-raspbian-buster-full.img
②中華製格安WiFiドングルを挿してwlan1とする。
③内蔵WiFiをwlan0とする。
④wlan1で、上位WiFiを受け、wlan0に中継する。
⑤wlan0のIPアドレスは、192.168.4.1
⑥DHCPの範囲は、192.168.4.100,192.168.4.200,255.255.255.0,24h
⑦hostapd v2.8-devel (hostapd -v)
⑧Dnsmesq version 2.80 (dnsmesq -v)
⑨dhcpcd 8.1.2 (dhcpcd --version)

1.ソフトウェアのインストール

 sshしたら、必要なソフトウェアをインストールします。
 以下の順でコマンドを実行。

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install dnsmasq hostapd

2.dnsmasqとhostapdのインストールが終わったら、
 これらのサービスを確認し、起動していたら終了させます。

$ service dhcpcd status
$ service dnsmasq status
$ service hostapd status

$ sudo systemctl stop dnsmasq
$ sudo systemctl stop hostapd

3.dhcpの設定

 次に設定ファイルを編集していきます。
 まずはdhcpの設定。

$ sudo nano /etc/dhcpcd.conf

「^w」「^v」で最後の行まで飛び、以下を追加します。

denyinterfaces wlan0

 wlan0をdhcpの対象から除外します。

「^o」で保存し、「^x」で終了します。

 ではdhcpを再起動させます。

$ sudo service dhcpcd restart


4.dnsmasqの設定

 次はdnsmasqの設定です。
 オリジナルの設定ファイルは、コピーしてバックアップを取っておきます。

$ sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.org
$ sudo nano /etc/dnsmasq.conf

「^w」「^v」で最後の行まで飛び、次の3行を追加します。

server=8.8.8.8
interface=wlan0
dhcp-range=192.168.4.100,192.168.4.200,255.255.255.0,24h

dhcp-rangeの設定は、適当に設定しています。

 同じく「^o」で保存し、「^x」で終了します。

5.hostapdの設定
 次はhostapdです。ここでアクセスポイントのSSIDやパスワードを設定していきます。

 まずは設定ファイルの例をコピーし開きます。

$ sudo cp /usr/share/doc/hostapd/examples/hostapd.conf /etc/hostapd/hostapd.conf
$ sudo nano /etc/hostapd/hostapd.conf

 開いたら以下を探して確認及び修正。

interface=wlan0
driver=nl80211
ssid=[SSID]
country_code=JP
hw_mode=g
channel=6
auth_algs=1
ieee80211n=1
wpa=2
wpa_passphrase=[PASS]
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

 同じく「^o」で保存し、「^x」で終了します。
 相当大きいファイルですので、下記コマンドで比較して変更されていることを再確認します。

$ sudo diff /usr/share/doc/hostapd/examples/hostapd.conf /etc/hostapd/hostapd.conf

 保存して終了したら、この設定ファイルを読むようにhostapdの動作ファイルを書き換えます。

$ sudo nano /etc/default/hostapd

#
#DAEMON_CONF=""

ここの#DAEMON_CONF=""をDAEMON_CONF="/etc/hostapd/hostapd.conf"と書き換えます。


 ここまで来たら、dnsmasqとhostapdを起動します。

$ sudo systemctl start hostapd
$ sudo systemctl start dnsmasq

Failed to start hostapd.service: Unit hostapd.service is masked.
もし、hostapdを起動させようとした時、上記エラーが出た場合、以下の手順でコマンドを実行してください。

$ sudo systemctl unmask hostapd
$ sudo systemctl enable hostapd
$ sudo systemctl start hostapd


$ sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf


起動したことを確認してみます。

$ service dhcpcd status
$ service dnsmasq status
$ service hostapd status

*緑色で active (running) と表示されていればOKです。
 違ってたら、設定ファイルを見直してみて下さい。


6.次に、IP転送の設定をします。

$ sudo nano /etc/sysctl.conf

 次の行を探しコメントを外して保存終了します。

#net.ipv4.ip_forward=1

7.IPマスカレードの設定をします。

 下記コマンドを実行してください。

$ sudo iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE
$ sudo iptables -A FORWARD -i wlan1 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT  
$ sudo iptables -A FORWARD -i wlan0 -o wlan1 -j ACCEPT

$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

8.次に、ラズパイが起動後に自動実行するように下記のファイルに追記します。
 *どうしてもwlan0に固定IPアドレスを振ることが出来なかったのでここで
  192.168.4.1の固定アドレスを設定しています。
 *他の方法で、設定できた方は、お教えください。

$ sudo nano /etc/rc.local

 一番下にexit 0とあるので、その上に以下の2行を追加します。

sudo ifconfig wlan0 192.168.4.1
iptables-restore < /etc/iptables.ipv4.nat

 追加したら保存して終了。

9.これでルーター機能付きWiFi中継器の設定は終わりです。
最後にRaspberryPiを再起動しましょう。

$ sudo reboot

しばらくすると、先程hostapdで設定したSSIDが見えるようになってますので、
設定したパスワードで繋いでみましょう。
めでたしめでたし

10.付録 複数の上位WiFiに自動接続させるために
***********************************************************************
WiFi設定ファイル
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

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

network={
        ssid="AP-1"
        psk="12345678"
        key_mgmt=WPA-PSK
        priority=6
}
network={
        ssid="AP-2"
        psk="12345678"
        key_mgmt=WPA-PSK
        priority=5
}
network={
        ssid="AP-3"
        psk="12345678"
        key_mgmt=WPA-PSK
        priority=4
}
network={
        ssid="test-ap"
        psk="12345678"
        key_mgmt=WPA-PSK
        priority=3
}


*********************************************************
以上 お疲れ様でした。

Raspberry Pi の ハードウェア情報 などを 表示するコマンドを紹介します。

①基板レイアウトの画像とハードウェア情報とリビジョンコードが表示されます。
$pinout


pinout



下記でリビジョンコードが分かります。

②CPU情報が表示されます。
$cat /proc/cpuinfo


③Model名が表示されます。 
$cat /proc/device-tree/model


④Raspbianのカーネルモジュールのバージョンが表示されます。 
$cat /proc/version


*設定済みRaspberryPi3のイメージ(donkey3_1_tf1_13_1.zip)は、Raspbian Liteが元なので
 デスクトップ環境がありませんでした。
 ちょっとしたファイル操作などが不便でした。
 そこで、デスクトップ環境を簡単にインストール方法を調べてみました。

下記コマンドで、PIXEL GUIをインストール出来ました。

$sudo apt-get install --no-install-recommends xserver-xorg
$sudo apt-get install --no-install-recommends xinit
$sudo apt-get install raspberrypi-ui-mods
$sudo reboot 0

但し、日本語フォントやVNC、テキストエデッタが、このままだと出来ないので、追加設定が必要です。

Raspberry Pi (donkeycar3) に Python3.8.1 をインストール
2020年1月28日時点

$ python3 -V
Python 3.7.3
これを3.8.1にしたいと思います。

 

最初にコンパイルに必要になるライブラリをインストールします。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install libffi-dev libssl-dev openssl

次にソースコードのダウンロード

$ wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz

コンパイルしていきます。

$ tar zxvf Python-3.8.1.tgz
$ cd Python-3.8.1
$ ./configure
$ make
$ sudo make install
エラー無くインストールできたらバージョンを確認します。

$ python3 -V
Python 3.8.1
 

続いてpipのアップデートを行います。

$ sudo pip3 install --upgrade pip
$ pip3 --version
pip 20.0.2 from /usr/local/lib/python3.8/site-packages/pip (python 3.8)

注)仮想環境では、まだ3.7.3のままでした。後日解明したいと思います。

ドンキーカーで動画を作成するために RASPI 3B に FFmpeg 4.x.x をインストールしました。

①インストール前に、アップデートを実行しておきます。

$ sudo apt update
$ sudo apt upgrade

②FFmpegを入手します。

$ cd ~
$ git clone https://github.com/FFmpeg/FFmpeg.git

③オプション設定を変更します。

$ cd FFmpeg
$ ./configure -–enable-gpl  --enable-nonfree -–enable-omx -–enable-omx-rpi

④コンパイルします。

$ make(非常に時間がかかります)

⑤インストールします。

$ sudo make install


*これでインストール完了です。


*ATOM & ATOM liteが到着しました。重さは、ATOM 7g lite 5gで小さくて軽いです。
 因みにM5StickCは15gでした。
 
atom

 動画は、IDEにてボードは、M5StickCでAdafruit NeoPixelのデモを書き込んでみました。


https://www.facebook.com/yoshito.hashiguchi/videos/pcb.463929294285763/1841414682656515/?type=3&theater&ifg=1




*TJBotに、ダッシュボード パレットを追加して、LEDやサーボモーター
 音声合成に画像認識を制御できるように追加してみました。

1.ブラウザの画面


tjbot01

2.フローの流れ


tjbot020





*VNCで接続するためにRaspberryPiの解像度を変更するには

1.ディスクトップにて
 *いちごマーク-->設定-->Raspberry Pi の設定-->システム-->解像度の設定 

vnc


2.Raspberry Piには従来のBIOSがないため、通常BIOSを使用して保持および
 設定されるさまざまなシステム構成パラメーターは、「config.txt」という名前
 のテキストファイルに保存されます。

 ①解像度の設定(/boot/config.txtの編集)
 $ sudo nano /boot/config.txt

 ②編集内容
 ファイル内に以下の記述があるので修正します。
 hdmi_force_hotplug=1  <-- これの記述も

 hdmi_group=2
 hdmi_mode=51 <---自分の解像度に合わせて修正

 行頭の#はコメント行であるという意味なので、変更するときには#を削除するか、
 別の行でhdmi_groupとhdmi_modeを定義します。

 下記リンク先のhdmi_group=2の解像度一覧で確認できます。
  RPiconfig


・Raspberry Pi 3B/ZERO の カメラ で撮影した動画をブラウザで視る

下記は、node-redのダッシュボードにストリーム配信しています。
mjpgst



簡単に配信することが出来たので備忘録を書いておきます。

1.RASPIでの作業

 ①インストール(下記のコマンドを順次コピペして実行します)
 $ sudo apt-get install -y cmake libv4l-dev libjpeg-dev imagemagick
 $ git clone https://github.com/jacksonliam/mjpg-streamer.git
 $ cd mjpg-streamer/mjpg-streamer-experimental
 $ make

 ②動画の配信
 標準カメラの場合
  $ ./mjpg_streamer -o "./output_http.so -w ./www" -i "./input_raspicam.so -x 640 -y 480 -fps 30 -q 10"

 USBカメラの場合
  $ ./mjpg_streamer -o "./output_http.so -w ./www" -i "./input_uvc.so -r 800x600 -fps 30"

 ③配信を強制的に止める場合
 $ ps ax         <--プロセスIDを確認
 $ kill -9 1234  <-- -9は、強制終了

2.動画の受信
 ①ブラウザで http://[ラズパイのIP]:8080/ を開くだけです。

参考URL:Raspberry Pi 3 の標準カメラで撮影した動画をブラウザに配信する方法まとめ


3.MJPG Streamerが、起動しない時

pi@raspberrypi:~ $ ./msstart.sh
MJPG Streamer Version: git rev: 501f6362c5afddcfb41055f97ae484252c85c912
 i: fps.............: 30
+++++++++
 i: Starting Camera
mmal: mmal_vc_component_create: failed to create component 'vc.ril.camera' (1:ENOMEM)
mmal: mmal_component_create_core: could not create component 'vc.ril.camera' (1)
error create camera

上記エラーで、MJPG Streamerが、起動できないときのチェック方法

①カメラが有効になっているか確認
$ sudo raspi-config
5 Interfacing Options => P1 Camera => Yes

②カメラを認識しているか確認

pi@raspberrypi:~ $ vcgencmd get_camera 
supported=1 detected=0 <-------------カメラを認識していない

pi@raspberrypi:~ $ ls -al /dev/video* <------ /dev/video0が無い
crw-rw----+ 1 root video 81, 0  1月 21 16:07 /dev/video10
crw-rw----+ 1 root video 81, 1  1月 21 16:07 /dev/video11
crw-rw----+ 1 root video 81, 2  1月 21 16:07 /dev/video12

調べた結果、カメラのコネクタが外れかかっていた。再度差し込み

pi@raspberrypi:~ $ vcgencmd get_camera
supported=1 detected=1 <-------------カメラを認識した

pi@raspberrypi:~ $ ls -al /dev/video*
crw-rw----+ 1 root video 81, 3  1月 21 16:27 /dev/video0 <------ /dev/video0が表示
crw-rw----+ 1 root video 81, 0  1月 21 16:27 /dev/video10
crw-rw----+ 1 root video 81, 1  1月 21 16:27 /dev/video11
crw-rw----+ 1 root video 81, 2  1月 21 16:27 /dev/video12

4.mjpg_streamer の起動用と停止用のシェルスクリプトを書いて簡単に実行できるにした。
 
 ①mjpg_streamer の起動シェル 「msstart.shの内容」

pi@raspberrypi:~ $ cat msstart.sh

#!/bin/sh
if pgrep mjpg_streamer > /dev/null
then
    echo "mjpg_streamer already running"
else
    cd mjpg-streamer/mjpg-streamer-experimental/
    ./mjpg_streamer -o "./output_http.so -w ./www" -i "./input_raspicam.so -rot 270 -x 640 -y 480 -fps 30 -q 10"> /dev/null 2>&1&
    echo "mjpg_streamer started"
fi

 ②mjpg_streamer の停止シェル 「msstop.shの内容」

pi@raspberrypi:~ $ cat msstop.sh

#!/bin/sh
if pgrep mjpg_streamer
then
    kill $(pgrep mjpg_streamer) > /dev/null 2>&1
    echo "mjpg_streamer stopped"
else
    echo "mjpg_streamer not running"
fi

5.カメラの取り付け方により回転したいときのオプション 「-rot」
①ラズパイカメラのオプション指定(google 翻訳済み)

$ ./mjpg_streamer -i "input_raspicam.so --help"

 -------------------------------------------------- -------------
 入力プラグインのヘルプ..:raspicam入力プラグイン
 -------------------------------------------------- -------------
 次のパラメーターをこのプラグインに渡すことができます。

 [-fps | --framerate] ...:ビデオフレームレートの設定、デフォルトは5フレーム/秒
 [-x | --width] ........:フレームキャプチャの幅、デフォルトは640
 [-y | --height] ........:フレームキャプチャの高さ、デフォルトは480
 [-quality] .............:JPEG品質を0〜100に設定、デフォルトは85
 [-usestills] ...........:ビデオモードの代わりに静止モードを使用します
 [-preview] .............:全画面プレビューを有効にします
 [-timestamp] ...........:各フレームのタイムスタンプを取得します

 -sh:画像の鮮明度を設定します(-100〜100)
 -co:画像のコントラストを設定します(-100〜100)
 -br:画像の明るさを設定します(0〜100)
 -sa:画像の彩度を設定します(-100〜100)
 -ISO:キャプチャISOを設定します
 -vs:ビデオの安定化をオンにします
 -ev:EV補正を設定します
 -ex:露出モードを設定します(raspistill notesを参照)
 -awb:AWBモードを設定します(raspistill notesを参照)
 -ifx:画像効果を設定します(raspistill notesを参照)
 -cfx:色効果の設定(U:V)
 -mm:メータリングモードを設定します(raspistill notesを参照)
 -rot:画像の回転を設定します(0-359)
 -stats:各画像の画像統計を計算します(-usestillsのノイズを減らします)
 -drc:ダイナミックレンジ補正レベル(raspistill notesを参照)
 -hf:水平反転を設定します
 -vf:垂直フリップを設定します
 -------------------------------------------------- -------------


②WEBカメラのオプション指定(google 翻訳済み)
 
$ ./mjpg_streamer -i "input_uvc.so --help"

 -------------------------------------------------- -------------
 入力プラグインのヘルプ..:UVC webcam grabber
 -------------------------------------------------- -------------
 次のパラメーターをこのプラグインに渡すことができます。

 [-d | --device] .......:開くビデオデバイス(カメラ)
 [-r | --resolution] ...:ビデオデバイスの解像度、
                          次の文字列のいずれかです。
                          QQVGA QCIF CGA QVGA CIF PAL
                          VGA SVGA XGA HD SXGA UXGA
                          FHD
                          または次のようなカスタム値
                          例:640x480
 [-f | --fps] ..........:1秒あたりのフレーム数
                          (カメラは異なる値に強制される場合があります)
 [-q | --quality] .>....:JPEGエンコーディングの品質を設定します
 [-m | --minimum_size]> .:この制限よりも小さいフレームをドロップします。便利です
                          ウェブカメラが小さなサイズのガベージフレームを生成する場合
                          低照度条件下で発生する可能性があります
 [-e | --every_frame] ..:番号付き以外のすべてのフレームをドロップします
 [-n | --no_dynctrl] ...:Linux-UVCドライバーのdynctrlを初期化しません
 [-l | --led] ..........:LEDを「オン」、「オフ」に切り替え、「点滅」または終了させます
                          値「auto」を使用するドライバー次第
 [-t | --tvnorm] ......:TV-Norm pal、ntscまたはsecamを設定します
 [-u | --uyvy] ........:UYVY形式を使用、デフォルト:MJPEG(より多くのCPUパワーを使用)
 [-y | --yuv] ........:YUV形式を使用、デフォルト:MJPEG(より多くのCPUパワーを使用)
 [-fourcc] ............:FOURCCコーデック「argopt」を使用します。
                          現在サポートされているコーデックは次のとおりです。RGBP
 [-timestamp] ..........:フレームタイムスタンプにシステム時間を入力します
 [-softfps] ............:このfpsを試行して達成するためにフレームをドロップします
                          f音を避けるために、カメラを最大fpsに設定します
 [-timeout] ............:デバイスクエリのタイムアウト(秒)
 [-dv_timings] .........:DVタイミングクエリとイベント処理を有効にします
 -------------------------------------------------- -------------

 オプションのパラメーター(すべてのカメラでサポートされているわけではありません):

 [-br] .................:画像の明るさを設定します(自動または整数)
 [-co] .................:画像のコントラストを設定します(整数)
 [-sh] .................:画像の鮮明度を設定します(整数)
 [-sa] .................:画像の彩度を設定します(整数)
 [-cb] .................:カラーバランスの設定(自動または整数)
 [-wb] .................:ホワイトバランスの設定(自動または整数)
 [-ex] .................:露出を設定します(自動、シャッター優先、絞り優先、または整数)
 [-bk] .................:逆光補正の設定(整数)
 [-rot] ................:画像の回転を設定します(0-359)
 [-hf] .................:水平反転を設定(true / false)
 [-vf] .................:垂直フリップの設定(true / false)
 [-pl] .................:電力線フィルターの設定(無効、50hz、60hz、自動)
 [-gain] ...............:ゲインの設定(自動または整数)
 [-cagc] ...............:クロマゲインコントロールの設定(自動または整数)
 -------------------------------------------------- -------------



ついに、ArduinoIDE1.8.10 の開発環境にて ESP32(M5STickC)でPS3のコントローラを使う事が出来たので備忘録として残しておく事にしました。

ps3_car


はじめに
PS3のコントローラは、接続先(ESP32)のBluetoothのMac Addressを記憶しなくては、なりません。

1.ESP32のBluetoothのMac Addressを調べるため、下記のスケッチを書き込み、メモしておきます。

BTmacadrs.ino
//*****************************************************
void setup(void) {
  Serial.begin(115200);
  Serial.println("-----------------------------");
  uint8_t btmac[6];
  esp_read_mac(btmac, ESP_MAC_BT);
  Serial.printf("[Bluetooth] Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", btmac[0], btmac[1], btmac[2], btmac[3], btmac[4], btmac[5]);
}

void loop() {
}
//*****************************************************


*実行例

ps3-01


2.PS3のコントローラに、Mac Addressを記憶させるために下記のソフトを使って記憶させます。
Windows用

SixaxisPairTool
  <-ここでダウンロード出来ます。2020/8/24


①PS3コントローラをMiniUSBケーブルでPCに繋ぎます
②SixaxisPairToolを実行し、<1.>でメモしたMac Addressを入力します。


*実行例

ps3-02


3.次に、PS3コントローラ用のライブラリをArduinoIDE1.8.10に追加します。
下記よりダウンロードして、ライブラリにzipを追加します。

download ps3 arduino library and add zip library

4.次のスケッチで、コントローラのテストを行います。
 *シリアルモニタで、各ボタン、アナログ値を確認できます。
 *シリアルプロッタのグラフで見るとジョイスティックアナログ値がよく分かります。

①PS3コントローラのPS釦を圧下し、ペアリングできる状態にします。
②スケッチを実行し、各ボタン、ジョイスティックを試験します。

ps3test.ino
//*****************************************************
#include <Ps3Controller.h>
void  setup()
{
    Serial.begin(115200);
    Ps3.begin("00:11:22:33:44:55"); //1.でメモしたmac adresに修正
    Serial.println("Ready");
}

void  loop()
{
  if  (Ps3.isConnected()){

    if (Ps3.data.button.select){
      Serial.println("select ボタン圧下");
    }
    if (Ps3.data.button.l3 ){
      Serial.println("l3 ボタン圧下");
    }
    if (Ps3.data.button.r3){
      Serial.println("r3 ボタン圧下");
    }
    if (Ps3.data.button.start){
      Serial.println("start ボタン圧下");
    }

    if (Ps3.data.button.up ){
      Serial.println("up ボタン圧下");
    }
    if (Ps3.data.button.right){
      Serial.println("right ボタン圧下");
    }
    if (Ps3.data.button.down ){
      Serial.println("down ボタン圧下");
    }
    if (Ps3.data.button.left){
      Serial.println("left ボタン圧下");
    }

    if (Ps3.data.button.l2 ){
      Serial.println("l2 ボタン圧下");
    }
    if (Ps3.data.button.r2){
      Serial.println("r2 ボタン圧下");
    }
    if (Ps3.data.button.l1 ){
      Serial.println("l1 ボタン圧下");
    }
    if (Ps3.data.button.r1){
      Serial.println("r1 ボタン圧下");
    }

    if (Ps3.data.button.cross){
      Serial.println("cross ボタン圧下");
    }
    if (Ps3.data.button.square){
      Serial.println("square ボタン圧下");
    }
    if (Ps3.data.button.triangle){
      Serial.println("triangle ボタン圧下");
    }
    if (Ps3.data.button.circle){
      Serial.println("circle ボタン圧下");
    }

    if (Ps3.data.button.ps){
      Serial.println("ps ボタン圧下");
    }
    
    Serial.print("128,-128,LX=,"); //プロッタ用基準線
    Serial.print(Ps3.data.analog.stick.lx);
    Serial.print(",LY=,");
    Serial.print(Ps3.data.analog.stick.ly);
    Serial.print(",RX=,");
    Serial.print(Ps3.data.analog.stick.rx);
    Serial.print(",RY=,");
    Serial.print(Ps3.data.analog.stick.ry);
    Serial.print(",SX=,");
    Serial.print(Ps3.data.sensor.accelerometer.x);
    Serial.print(",SY=,");
    Serial.print(Ps3.data.sensor.accelerometer.y);
    Serial.print(",SZ=,");
    Serial.print(Ps3.data.sensor.accelerometer.z); 
    Serial.println();
  }
  delay(100);
}

//*****************************************************


*シリアルモニタでの実行例

ps3-10


*シリアルプロッタでの実行例

ps3-11

以上

・2019年10月12日 台風19号 接近時 の 気圧変化 を 
 ambient  で 記録していた時のグラフです。


台風19号気圧変化


S__41869344


S__41869343




・raspi にて PS3controller を UDP で M5StickC へ
 接続するためのpythonプログラムです。
プログラムの概要
1. PS3controller をbluetoothで、paspiに接続
2.それをRCWCのフォーマットに変換
3.その後、UDPにてM5StickCに送る


#!/usr/bin/python3
import struct
import socket #UDP送信
import time #待機時間用
from contextlib import closing #with用
host = '192.168.4.1' # IPアドレス(変更する!)
port = 10000 # ポート番号
device_path = "/dev/input/js0"

# unsigned long, short, unsigned char, unsigned char
EVENT_FORMAT = "LhBB";
EVENT_SIZE = struct.calcsize(EVENT_FORMAT)

ps3_RCWC = {0:0x0020,1:0x0040,2:0x0010,3:0x0100,4:0x0200,5:0x0800,6:0x0400,7:0x1000,8:0x000c,9:0x0003,10:0,11:0,12:0,13:0x0001,14:0x0002,15:0x0008,16:0x0004}

data = bytearray([0,0,0,0,0,0,0,0,0,0])

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #ソケットの設定
skip_flg = 0
ct = 0
btime = 0 #前回の時間
bval = 0
ds3_time = 0
ds3_val = 0

with closing(sock): #プログラム終了時にソケットを自動的に閉じる      
 with open(device_path, "rb") as device:
  print("Program Start")
  event = device.read(EVENT_SIZE)
  while event:
    btime=ds3_time
    bval=ds3_val
    (ds3_time, ds3_val, ds3_type, ds3_num) = struct.unpack(EVENT_FORMAT, event)
    print(" ")
    print( "{0}, {1}, {2}, {3}".format( ds3_time, ds3_val, ds3_type, ds3_num ) )
    print("COUNT=",ct)
    ct=ct+1

    if ds3_val == 0:
        ct=0
    if (ds3_type == 2 and ds3_val !=0):
        #if ds3_time-btime < 20:
        if abs(abs(ds3_val)-abs(bval))<1000:
            event = device.read(EVENT_SIZE)
            continue
    
    if (ds3_type == 129 or ds3_type == 130):
         event = device.read(EVENT_SIZE)
         continue        

    if ct > 100:
        event = device.read(EVENT_SIZE)
        continue
    

    val=0
    if ds3_type == 1: #ボタン圧下判定
        skip_flg = 0
        if ds3_num in ps3_RCWC:
          val = ps3_RCWC[ds3_num] #対応ボタンデータ取得
          if ds3_val == 0:
             data[0]=0
             data[1]=0
          else:
             data[0]=int(val // 256)
             data[1]=int(val % 256)
          
    elif ds3_type ==2: #ジョイスティック判定
        skip_flg = 0
        if ds3_val == 0: #中点の時
            val = 128
            data[2]=(val)
            data[3]=(val)
            data[4]=(val)
            data[5]=(val)
        else:
          if ds3_num == 1:  #左側 上下
            if ds3_val < 0: # 上側方向
                val = 128 + abs(int((ds3_val/256)))
            else:           # 下側方向
                val = 128 - int((ds3_val / 256))
            data[3] = (val & 0xff)

          elif ds3_num == 0: #左側 左右
            if ds3_val < 0:  # 左側方向
                val = 128 + int((ds3_val/256))
            else:            # 右側方向
                val = 2 * int((ds3_val / 256))                 
            data[2] = (val & 0xff)

          elif ds3_num == 3: #右側 左右
            if ds3_val < 0:  # 左側方向
                val = 128 + int((ds3_val/256))
            else:            # 右側方向
                val = 2 * int((ds3_val / 256))          
            data[4] = (val & 0xff)
          elif ds3_num == 4: #右側 上下
            if ds3_val < 0:  # 上側方向
                val = 128 + abs(int((ds3_val/256)))
            else:            # 下側方向
                val = 128 - int((ds3_val / 256))
            data[5] = (val & 0xff)
          else:
            skip_flg = 1
            val = 128
            data[2]=(val)
            data[3]=(val)
            data[4]=(val)
            data[5]=(val)
            
        print("analog val=",int(val),ds3_val)
                  
#    elif (ds3_type == 129 or ds3_type == 130):
#        skip_flg=1
    else:
        skip_flg=1    
            
#    print("val=",hex(val),val)   
#    for i in range(10):
#      hex_str = format(data[i],'02x')
#      print(hex_str," ",end="")
#    print(" ")

#UDP send    
    if skip_flg == 0:
        print("send: ", data) #送信した文字列を送信側に表示
        print(" ") 
        sock.sendto(data, (host, port)) #ソケットにUDP送信
#    time.sleep(0.5)
    event = device.read(EVENT_SIZE)

・ラズベリーパイ 仮想キーボード 文字化けについて

下記で、仮想キーボードをインストールする。
$ sudo apt-get install matchbox-keyboard

いざ使うとすると、文字化けで使えません。

下記をインストールして文字化けが直りました。
# sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname
 
以上 めでたしめでたし

・M5StickC で UIFLOW を 使かってみる。


ここに↓ [web uiflow]接続し、[APIKEY]を設定する。
http://flow.m5stack.com/


webuiflow



ここで↓M5Burner をダウンロードして、M5StickCに焼く。
https://m5stack.com/pages/download


下記を参照にセットアップする。

M5stack(M5GO)とM5UI.Flowであそんでみた
https://qiita.com/mashed-p/items/1ba7a3dc54e3b766c2a8

uiflow


以上


PS3コントローラをBluetoothでつなげる

ps3ds


まず、検索デスクをクロームにセットする。
https://www.searchdesk.com/

最近は、apt-getでなくaptを使用するみたい。
$コマンドリストをコピぺしてセットアップする。

◆システムのアップデート
$ sudo apt-get update
$ sudo apt-get dist-upgrade

◆日本語フォントのインストール
$ sudo apt-get install fonts-noto-cjk fonts-ipafont fonts-ipaexfont fonts-takao 

◆UI のフォント変更
デスクトップの何もない所を右クリックし [デスクトップの設定] を選択 (またはアプリケーションメニューから [設定 | Appearance Settings] )。

[System] タブの [Font] を Noto Sans CJK に変更 (フォントの種類は任意です)。

◆一旦再起動しないとフォントが正しく反映されません。
$ sudo reboot

◆Chromium (ブラウザ) の日本語化
$ sudo apt-get install chromium-l10n

◆LibreOffice (Office スイート) の日本語化
$ sudo apt-get install libreoffice-help-ja

◆PS3コントローラをBluetoothでつなげる
$ sudo apt-get -y install libusb-dev joystick python-pygame

$ cd ~
$ wget http://www.pabr.org/sixlinux/sixpair.c
$ gcc -o sixpair sixpair.c -lusb

$ sudo reboot

$ sudo ~/sixpair

GUIにてコントローラーのペアリング

$ jstest /dev/input/js0

***************************************************************

PS3リモートを新しいRaspberry Pi Zero Wに接続する方法
https://www.piborg.org/blog/pi-zero-wifi-ps3

PlayStation 3コントローラーヘルプシート
https://www.piborg.org/blog/rpi-ps3-help

RaspberryPi Zero WとPS3コントローラをBluetoothでつなげる
http://ei0124.blog.fc2.com/blog-entry-43.html

Pythonでdualshock3の入力を読み取る
https://www.usagi1975.com/30jul170722/

Playstation 3コントローラーの構成
https://pythonhosted.org/triangula/sixaxis.html

・aitendoの8x8LEDのpin番号を調べてみた

COL,ROWの並びとピン番号の並びはめちゃくちゃですね。

1.
S__41689092


2.
LED8x8PinNo


3.
LED8x8


・BeetleC 概要

マイコン:ST32F030 F4P6
DC Stepper Motor Driver:L9110S
Motor:DC3V 1200 rpm ターン DIY ミニモデルモーター
https://www.aliexpress.com/item/32953011103.html?fbclid=IwAR0zsMxg88UmxZWpf7rQym0mGl1fKLqnnqMWVd3zXJpePqvioC9QUPe3O9w

操縦:サンプルスケッチは Motorが速く webでの操縦がしにくい。

1.
BeetleC-1


2.
BeetleC-2


3.
BeetleC-3


4.
Beetlec-4


5.
BeetleC-5


6.
BeetleC-6




















最近、ESP-32やらAlexaやらWiFiの機器が増えてきて推奨接続台数をオーバーして、
時々繋がらないことが頻繁に起こるようになりました。
よって、アクセスポイントを増設しました。
機器は、コストパフォーマンスのよい
「TP-Link WiFi 無線LAN ルーター 11ac MU-MIMO ビームフォーミング
 全ポートギガビット デュアルバンド AC1200 867 + 300Mbps Archer C6」
をアマゾンで購入しました。

これで、接続エラーが減少してくれればと思っています。

https://www.amazon.co.jp/gp/product/B07HMVH73D/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1


TP-LINK



M5StickC/M5stack用のGROVE互換コネクタをaitendoで買ってきました。
ちゃんと会うかスイッチサイエンスの互換ケーブルを持っていき、
店で確かめて買いました。


GROVE


・R634M パームレフトをカッティングシートで補修

オークションで買ったノートパソコンのパームレフトがだいぶ使い込まれて
すり減っていたのでカッティングシート(45cmx20cm D2で63円)を購入して、
張ってみた。

中々の出来で満足しています。

張りつけ後の状態

i7-21

i7-22


元の状態

i7-11

i7-12


・aitendo ★特売品★LEDランプユニット 

先週「★特売品★LEDランプユニット [LED5050X24](LEDx24個直列接続、詳細仕様不明)」を99円で買ったものです。

LED5050x24


詳細仕様不明だったので1チップのLEDを調査してみました。
結果、1チップに3つのLEDが直列に接続されていました。
20mA流した時、電圧9.25Vでした。
全体のLEDの配線も確認しました所、12個直列の2並列で24個でした。よって、約9Vx12=108Vで端子電圧は、約110Vであろうと確認しました。

写真は、約20mA流した時のもの
LED20mA9_2V


写真は、約1mA流した時のもの
LED1mA7_8V





・卓上冷風機 の 使用報告

アマゾンで卓上冷風機 冷風扇 扇風機 usbクーラーをゲットしました。

動作確認も含めて温度測定してみました。(普通の水道水にて)
風量1の時、後ろの温度31.3度、前の温度27.8度 温度差3.5度
風量3の時、後ろの温度31.3度、前の温度27.3度 温度差4.0度
風量1でも、風量が、かなりありそれなりの音がします。
でも冷え冷えで気持ちいいです。
氷水をいれると、もっと冷えるのでしょう。

風量1の時の写真
風量1


風量3の時の写真

風量3





・マイクロUSBの半田付けにUSB電子顕微鏡を使ってみた


マイクロUSBなど、0.635ピッチや1.27ピッチの半田付け用にと
USB電子顕微鏡を使ってみて、概ね良好であった。

AliExpressにて購入

Windows10 pro x64 1903 にて、amazon alexa アプリを入れて試してみました。

パソコンでも、「アレクサ」で応答してくれました。

スマートホームもコントロールできました。

音楽も再生出来ました。

無料で、出来るのでエコードット買わなくても済みますね。

天気なども、画面に表示されますので、エコーSHOW買わなくても済みますね。

なんで無料で、ここまで提供してくれるのでしょう。

是非、皆さんも試してみて下さい。コルタナより便利です。


alexa-pc


・VertualBox VM に Raspberry Pi Desktop をインストールし 解像度 の 変更


2019-06-14 (1)

●VertualBox VM のメニューバーにある Devices をクリックし、
 Insert Guest Additions CD image... をクリックする。

●VBoxGuestAdditions をインストール
$ sudo sh /mnt/cdrom/VBoxLinuxAdditions.run

●grab ファイルの変更
$ sudo nano /etc/default/grub

#
GRUB_TIMEOUT=5
|
|
#GRUB_GFXMODE=640x480
GRUB_GFXMODE=1024x768 #コメント外し解像度を変更


GRUB_GFXMODE=xxx で解像度を変更することができるようです。

vga と解像度の関係を表した表を以下のページで確認できます。

●grab ファイルの反映
$ sudo grub-mkconfig -o /boot/grub2/grub.cfg

●再起動
$ sudo shutdown -r now

これで解像度が変わっているはずです。



rpd-cloud

●●●[メモ] Raspberry Pi:VNCサーバー設定(自動起動)

*************************************************************************************************
1.●Raspberry Pi Desktop (Stretch) を USB フラッシュドライブから起動して使う
*************************************************************************************************
◆システム情報
$ uname -a
Linux raspberrypi 4.9.0-4-amd64 #1 SMP Debian 4.9.51-1 (2017-09-28) x86_64 GNU/Linux

◆システムのアップデート
$ sudo apt-get update
$ sudo apt-get dist-upgrade

◆日本語フォントのインストール
$ sudo apt-get install fonts-noto-cjk fonts-ipafont fonts-ipaexfont fonts-takao 

◆UI のフォント変更
デスクトップの何もない所を右クリックし [デスクトップの設定] を選択 (またはアプリケーションメニューから [設定 | Appearance Settings] )。

[System] タブの [Font] を Noto Sans CJK に変更 (フォントの種類は任意です)。

◆一旦再起動しないとフォントが正しく反映されません。
$ reboot

◆Chromium (ブラウザ) の日本語化
$ sudo apt-get install chromium-l10n

◆LibreOffice (Office スイート) の日本語化
$ sudo apt-get install libreoffice-help-ja

◆Scratch 2 (プログラミング言語) の日本語化
Scratch 2 を日本語化するには、右上の地球アイコンをクリックし [日本語] または [にほんご] を選びます。

◆IM (入力メソッド)Mozc を導入します。
$ sudo apt-get install fcitx-mozc
再起動
$ reboot

◆入力メソッドの設定
1.アプリケーションメニュー (ラズベリーアイコン) から [Fcitx 設定] を選ぶ。
2.最初は [キーボード - 英語 (UK)] と [Mozc] になっている。
3.左下の [+] ボタンを押す。
4.[キーボード - 日本語 - 日本語 (OADG 109A)] を選択し [OK] ボタンを押す。
5.[キーボード - 英語 (UK)] を選択し、左下の [-] ボタンを押して削除する。
6.上下の矢印ボタンを使い、
7.最終的にはこの並びにする。

◆IM 切り替えキーの設定
引き続き [Fcitx 設定] を行います。
1.[全体の設定] タブをクリック
2.[入力メソッドのオンオフ] の右側のボタンを押す。
3.[設定したいキーの組み合わせを押してください] というダイアログが出るので
物理キーボードの〔半角/全角〕ボタンを押す。
最初から右側のボタンが [Zenkakuhankaku] になっていたとしても
この設定を行う必要がある。

これで〔半角/全角〕または〔Ctrl〕+〔SPACE〕で IM をオンオフできるようになります。

◆ハードウェアクロックをローカルタイムに変更(winと共用する場合)
$ sudo hwclock --systohc --localtime

*****************************************************************************************
*****************************************************************************************
いつもの手順と、Webサーバ、MariaDB、PHP等をインストール。
$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt-get install -y apache2 mariadb-server libapache2-mod-php7.0 php7.0-gd php7.0-json php7.0-mysql php7.0-curl php7.0-intl php7.0-mcrypt php-imagick php7.0-zip php7.0-xml php7.0-mbstring memcached php7.0-memcached php-apcu

◆Webサーバの設定
$ cd /etc/apache2/sites-available/
$ sudo nano owncloud.conf # 新規作成

Alias /owncloud "/var/www/owncloud/"
<Directory /var/www/owncloud/>
        Options +FollowSymlinks
        AllowOverride All

        <IfModule mod_dav.c>
                Dav off
        </IfModule>

        SetEnv HOME /var/www/owncloud
        SetEnv HTTP_HOME /var/www/owncloud
</Directory>

$ sudo a2ensite owncloud.conf
$ sudo a2enmod rewrite
$ sudo a2enmod headers

$ sudo systemctl restart apache2

◆※ファイルアップロードの上限を変更(仮に1000M(1G)バイト)する場合は、以下の手順も実施。
$ sudo nano /etc/php/7.0/apache2/php.ini # 編集

upload_max_filesize = 2M
upload_max_filesize = 1000M

post_max_size = 8M
post_max_size = 1000M

◆データベースの設定
データベースを作成しユーザとパスワードを設定します。
今回は例として以下の値を設定します。
・データベース名:owncloud
・ユーザ名:root
・パスワード:password

$ sudo mysql -uroot
> CREATE DATABASE IF NOT EXISTS owncloud;
> GRANT ALL PRIVILEGES ON owncloud.* TO 'root'@'localhost' IDENTIFIED BY 'password';
> quit

◆ownCloudのインストール
いよいよ、ownCloudをインストールし、データフォルダを作成します
$ cd /var/www/
$ sudo wget https://download.owncloud.org/community/owncloud-10.2.0.tar.bz2 #最新版を確認
$ sudo tar xvf owncloud-10.2.0.tar.bz2
$ sudo rm -f owncloud-10.2.0.tar.bz2
$ sudo mkdir /var/www/owncloud/data
$ sudo chown -R www-data:www-data /var/www/owncloud/
$ sudo chmod 770 /var/www/owncloud/data/
$ sudo reboot

◆ownCloud初期設定
以下のアドレスに接続します。

http://[ラズパイのIPアドレス]/owncloud/

初期設定画面が表示されるので、適当な値を入力します。
今回は例として以下の値を設定します。
・管理者アカウント:admin
・管理者パスワード:password
・データフォルダー:/var/www/owncloud/data/
・データベースのユーザー名:root
・データベースのパスワード:password
・データベース名:owncloud
・データベースのホスト名:localhost

◆ちょっと待つとログイン画面が表示されます。

*************************************************************************************
3.●●●[メモ] Raspberry Pi:VNCサーバー設定(自動起動)
*************************************************************************************

◆手順
◆その1: systemd
1.いつもの
$ sudo apt-get update
$ sudo apt-get upgrade -y
$ sudo reboot..)

2.インストール: 
$ sudo apt-get install -y tightvncserver

3.手動で一回立ち上げて、パスワード設定: 
vncserver :1

4.systemdのファイル編集:
$ sudo nano /etc/systemd/system/vncserver@.service

[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
User=pi
PAMName=login
PIDFile=/home/pi/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target


5.サービス登録:
$ sudo systemctl daemon-reload && sudo systemctl enable vncserver@1.service

6.再起動:
$ sudo reboot

7.vncviewer.exe(Windowsクライアント)をダウンロードインストールする

・Dynabook R634/M SDDの換装(128G->512GB)

R634のmSATAタイプのSSDを128GBから512GBへ換装しました。
中華版の安価なもので、動くか心配でしたが、うまく動いてくれました。
ベンチマークもまあまあで、安心しました。

●中華版mSATAタイプSSD
kingcoco512GB

●ベンチマーク

ベンチマーク

●換装後の写真

512G換装後


●左が、今回の512GB 右が、今までの128GB mSATAタイプのSSD

mSATA512G-128G

ONKYO Nexterm P305 メモリの増設とSSDの換装方法

写真1,2,3の赤丸の所のネジを外すと
写真4に示すように分解できます。

写真1
p305-bn-1

写真2
p305-bn-2

写真3
p305-bn-3

写真4
p305-bn-4

・Eee Slate EP121分解ファン清掃

EP121のCPUスピードが、発熱により、固定650MHzになる為、
分解してファンの清掃をした。

1.液晶と裏ブタは、ツメで止まっているだけなので、ヘラで注意深く
 外していけば、二つに分解できた。
2.ファンが、ホコリで固まっていたのでOAダスターで吹き飛ばした。
3.電源を入れて、手で回してやったら回りだした。
以上

S__40386573


S__40386572

S__40386571
●清掃後のファン
S__40386570

千石電商にて
2.4インチ液晶
GAME MACHINE 108 IN 1
108種類のゲームが入ったレトロ筐体型ゲーム機が
売っていました。
思わずなんか改造して遊べそうなので買ってしまいました。


S__40361996

・windows10のアップグレードについて

1.下記のページに行きます。

下記写真を参照
① 「ツールを今すぐダウンロード」をクリックし、ダウンロードします。
② 下の二つ目の+をクリックし。内容を確認します。
  ・ここで、別のPCをwindows10にアップグレードするにして
   USBメモリかISOファイルを選択します。
③ あとは、お好きなように。

win10upg-1

ジャンク屋さんで見かけたちょっと気になる物ですが、好奇心で買ってしまいました。
なんと冷却用のペルチェじゃなくビットコインマイニング用のマシンでした。(antminer u3)
私としては、ビットコインは聞いたことはありますがマイニングは、初めて聞く言葉です。

私の使い道は、分解して部品取り(ヒートシンクとファン)位ですかね。

画像も見つかりました。下記参照。
ラズベリーパイ2ビットコイン採掘リグとビットメインAntMiner U3をセットアップする方法
https://www.youtube.com/watch?v=dPWTSytzN7g

AntMiner U3とRaspberry Piを実行しているCGMiner
https://kism3t1.blogspot.com/.../antminer-u3-raspberry-pi...


下記は、分解してみた時の写真です。

S__39936003

korenani

ラズベリーパイ3B用のケースを2種類、Aliexpressで購入しました。

透明ケース 410円

黒いケース  321円

raspi3bケース

ESP32他の開発用に電流容量の多いUSB3.0対応のハブを購入しました。
これで、開発中に電源低下によるリブートの繰り返しが無くなった。
個別スイッチ付きで、使うポートだけON出来るので便利です。

https://www.amazon.co.jp/gp/product/B07CP39CYV/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1


USB30HUB


dynabook R634/MのRAMが4GBだったのでPC3L-12800(DDR3L-1600)8GB(1.35V)を増設して合計12GBにしてみました。 問題なく快適に動いています。


R634MRam8GB増設
dynabookR634M

ダイソーで、乾電池式のモバイルバッテリーが、売っていました。
単三2本でIot機器を動かせそうです。
分解して電池ケースとDCDCコンバータを108円で手に入れたことになります。

モバイルバッテリー

↑このページのトップヘ