もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

ラズパイ GPIO 拡張ボードを使ってLチカしてみる

はじめに

こんにちは。

この記事は Kojirock1一人 Advent Calendar 2019の5日目の記事です。

adventar.org

今回は参考本ではなく、事前に買った初心者キットに入っていたものを使いながら色々遊んでみます。

初心者キットの中に、 GPIO Extension Borad というワクテカなパーツが入っていたので、早速使ってみました。

入っていたT型拡張ボードは、拡張というよりは、わさわさとラズパイにケーブルを繋げて、こんがらがっちゃうのをスッキリ繋げられるような立ち位置?かもしれません。

yeswego.biz

やってみた

早速つなげてみました。

f:id:kojirooooocks:20191115021435j:plain

f:id:kojirooooocks:20191115021454j:plain

スッキリ!!

ちなみに拡張ボードを使わなかった場合はこんな感じでした。

f:id:kojirooooocks:20191115021552j:plain

たったこれだけでもスッキリしてますね。

終わりに

今回はこれだけですw

てゆか、参考にしていた本を読み進めようと思ってたのですが、参考本で使われるパーツが手元にないので実践できないという事件に陥っています。

なので、次回はそのパーツを買って試すか、今回みたいに初心者キットの中野パーツを使ってなにかするか、どちらかになると思います。

現場からは以上です。

スイッチでラズパイを遊んでみる

はじめに

こんにちは。

この記事は Kojirock1一人 Advent Calendar 2019の4日目の記事です。

adventar.org

今回も参考本を見ながら触っていきます。

前回は定番のLチカまで行きました。

今回はスイッチで遊んでみます。

やってみた

参考本にはトグルスイッチ・スライドスイッチ・DIPスイッチなどいろいろな種類が紹介されていましたが、自分が買った初心者キッドに状態を切り替えるスライドスイッチと、状態を戻すタクトスイッチが入っていたので、今回はこれを使ってみました。

f:id:kojirooooocks:20191113225442j:plain

f:id:kojirooooocks:20191113225459j:plain

まずはタクトスイッチからです。

タクトスイッチ

参考本のスクリプトをそのまま使用します。

#! /usr/bin/env python

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(9, GPIO.IN, pull_up_down=GPIO.PUD_UP)

while True:
    print(GPIO.input(9))
    time.sleep(0.5)

タクトスイッチが押されているときだけ 0 が表示され、 押されていないときは 1 が表示されます。

f:id:kojirooooocks:20191113232513g:plain

参考本では更にスクリプトを編集して、タクトスイッチを押した回数をカウントするという試みもありましたが、それはプログラム改修のはなしなので今回は飛ばしました。

スライドスイッチ

参考本ではタクトスイッチの説明の後、扇風機を制御するというチャプターに入ってしまうのですが、スライドスイッチで遊べてもないし、扇風機も初心者セットに入ってないので、とりあえずスライドスイッチを扱っているような初心者向けのサイトを探すと、以下の記事が見つかったので、こちらの内容を試してみました。

qiita.com

こちらの記事では WiringPi なるライブラリを使っているようなので、インストールしておきます。

$ pip install wiringpi

これでスクリプトも問題なく動きます。

配線は記事と同様に繋いでみました。

f:id:kojirooooocks:20191114005927j:plain f:id:kojirooooocks:20191114005938j:plain f:id:kojirooooocks:20191114005948j:plain

スクリプトも同様のものを使わせてもらっています。

# -*- coding: utf-8 -*- 
import wiringpi 
import time 
import sys 
 
led1_pin = 23 
led2_pin = 24 
switch_pin = 17 
 
 
param = sys.argv 
set_interval = int(param[1]) 
 
wiringpi.wiringPiSetupGpio() 
wiringpi.pinMode( led1_pin, 1 ) 
wiringpi.pinMode( led2_pin, 1 ) 
wiringpi.pinMode( switch_pin, 0 ) 
 
led = 0 
 
while True: 
    wiringpi.digitalWrite( led1_pin, 0 ) 
    wiringpi.digitalWrite( led2_pin, 0 ) 
 
    while ( wiringpi.digitalRead(switch_pin) == 1 ): 
        print("switch on") 
 
        if ( led == 0 ): 
            wiringpi.digitalWrite( led1_pin, 1 ) 
            wiringpi.digitalWrite( led2_pin, 0 ) 
            led = 1 
            print("LED1") 
        else: 
            wiringpi.digitalWrite( led1_pin, 0 ) 
            wiringpi.digitalWrite( led2_pin, 1 ) 
            led = 0 
            print("LED2") 
        print(set_interval) 
        time.sleep(set_interval)

f:id:kojirooooocks:20191114010207g:plain

光りました!

ブレッドボードの切れ目で接続してしまって、光らないうーん。。。というので20分くらい悩みましたが、なんとか行きましたw

3年以上前の記事ですが、2019年現在でも問題なく動かすことが出来ました。

終わりに

参考本に紹介されていた扇風機を動かすというやつがやりたかったのですが、初心者キットにはプロペラが入ってなかったので、なにか代替(モーターを使うなにか)で出来ないかを検討中です。

それは次回の記事で。

現場からは以上です。

ラズパイでLチカしてみた

はじめに

こんにちは。

この記事は Kojirock1一人 Advent Calendar 2019の3日目の記事です。

adventar.org

前回まででOSまで入って、sshでログインまで出来たので早速参考本を見ながら触っていきます。

参考本は以下

やってみた

最初の方はラズパイの説明や、コマンドの説明など超初心者向けなのでここは飛ばして、まずは各インターフェースの設定を行いました。

コマンドは以下

$ sudo raspi-config

f:id:kojirooooocks:20191113041510p:plain

とりあえずカメラは後に試したいのでカメラはenabledにしておきます。

f:id:kojirooooocks:20191113041524p:plain

f:id:kojirooooocks:20191113041536p:plain

f:id:kojirooooocks:20191113041547p:plain

あとvimが入ってなかったので入れときます。

$ sudo apt-get install vim

次に本では、ラズパイの使用方法の説明があり、クライアントマシンとしてやwebサーバーとして扱うなどの説明が記載されていますが、今回はどれにも該当しないのでここも飛ばします。さらに次はプログラムの説明やScratchの説明がありますが、こちらも飛ばします。

6章の電子回路をRaspberry Piで制御するが今回の目的です!

早速行きます。

もろもろの電子部品は以下の初心者キッドで揃えました!

ブレッドボード・ジャンパー線は理解できたのですが、「抵抗」に関してはなかなか理解するのが難しかったです。

f:id:kojirooooocks:20191113041648j:plain

本書で紹介されているのは線が4本のものなのですが、手元にあるのは線が5本...

一応購入した初心者キットには抵抗の値を書いてくれていますが、線ごとに意味があり計算が違ってくるから、5本だとどう計算するのとなりました。

別途ググるこちらのサイトを見つけました。

5本の色帯表示です。 許容差を表す色帯がほかのものより太くなっているので、太い帯びの逆側から読みます。

なるほど!これで計算もわかりました。

Lピカやってみた

とりあえず定番のLチカならぬLピカをやってみます。

回路図も本書にわかりやすく記載があるので簡単でした。

f:id:kojirooooocks:20191113041714j:plain

f:id:kojirooooocks:20191113041732j:plain

出来ました!

Lチカやってみた

こちらも回路図通りに接続してみます。

今回はスクリプトで 点灯・消灯を切り替えます。

本書で使用されていた スクリプトをそのまま使います。

#! /usr/bin/env python 
 
import RPi.GPIO as GPIO 
import time 
 
 
GPIO.setmode(GPIO.BCM) 
GPIO.setup(4, GPIO.OUT) 
 
try: 
    while True: 
        GPIO.output(4, GPIO.HIGH) 
        time.sleep(1) 
 
        GPIO.output(4, GPIO.LOW) 
        time.sleep(1) 
 
except KeyboardInterrupt: 
    GPIO.cleanup()

f:id:kojirooooocks:20191113043606g:plain

出来ました!

終わりに

とりあえず定番のLチカが出来ました。

抵抗とかオームの法則とか懐かしくて全く覚えてない物が出てきて、ちょっと混乱してしまいましたが、一旦ここまでにします。

このあたりを丁寧に解説してくれてる小学生?中学生?のときの本がほしい。

現場からは以上です。

ラズパイOS入れてみた

はじめに

こんにちは。

この記事は Kojirock1一人 Advent Calendar 2019の2日目の記事です。

adventar.org

前回キーボード・マウス無し・LANケーブルもなしでラズパイを起動しか出来なかったので、さっそくキーボード・マウス云々を買い揃えてやってみました。

やってみた

ネットワーク設定を済まして、さっそく起動

f:id:kojirooooocks:20191110145321j:plain

OS入れ始めました。

でもたしか、俺買ったのOS入ってるやつだったんだけど...。まぁいいか。

あと、CEMのメンバーからキーボード・マウスなしでもいけるよ?っていう参考サイトを教えてもらったのですが、自分ではうまく設定できませんでした...

一応参考サイトはこちら

dev.classmethod.jp

また、一番最初以下と同じようなエラーが出てて、頭を悩ませていたのですが、再起動したらエラーが出なくなりました。

teratail.com

ほかにも、「ん??」と思ったのが、以下のようにプログレスバーが100%になったままで20分くらい動かなかったのがありました。

f:id:kojirooooocks:20191110145419j:plain

どうしよう。。。と思ってたのですが、そっとマウスをクリックしたら進みましたw

f:id:kojirooooocks:20191110145542j:plain

残りはLanguage設定もろもろをやって、リスタートしてついにSSHでログインしてみます!

$ ssh pi@raspberrypi.local
The authenticity of host 'raspberrypi.local (xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx)' can't be established.
ECDSA key fingerprint is SHA256:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'raspberrypi.local,xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx' (ECDSA) to the list of known hosts.
pi@raspberrypi.local's password: 
Linux raspberrypi 4.19.75-v7+ #1270 SMP Tue Sep 24 18:45:11 BST 2019 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Nov 10 12:23:47 2019
pi@raspberrypi:~ $ 

入れたー!!!!!!

終わりに

ついに終わりました。 無線使える 3を買いましたけど、LANケーブル買ったので結局有線接続にしてます...w

ついに次からすすめます!

現場からは以上です。

Raspberry Pi 起動してみた

はじめに

こんにちは。

この記事は Kojirock1一人 Advent Calendar 2019の1日目の記事です。

adventar.org

勢いで購入してみました。 Raspberry Pi

一人Advent Calendar中にどんな事ができるようになるか、わくわくです。

f:id:kojirooooocks:20191109032526j:plain

組み立てから写真撮っていこうと思ってたのですが、勢い余って先に組み立てちゃいました。

今回は起動までやりました。

というか起動までしか出来ませんでした。

理由は後ほど。

どんなの買ったのか

本体

正規代理店のこちらのサイトから以下のセットを購入しました。

raspberry-pi.ksyic.com

現在 ラズパイは 4, 3+, 3 があるみたいなのですが、こちらのサイトでは、すぐ購入できるのは3しかなかったのでこちらにしました。

とりあえず 無線が使えるっぽいのでOKです。

こちらのセットはすでにOSインストール済みのSDがついてくるのでお手軽です。

めんどくさいのは嫌いです。

組立自体はとても簡単だったのですが、ヒートシンクにほんの少しだけ手こずりました。

手こずったというか、なんというか、ヒートシンクという存在を知らなかったです。

これくらいの知識レベルから始めるので、温かい目で見守ってください。

その他の部品

とりあえず初心者セットでしょ!ということで以下を購入しました。

また、カメラ使いたいなと思って以下も購入しました。

書籍

以下を購入しました。

最初はこれを読みながら進んでいこうと思います。

起動

そんなわけでもろもろ来たので一旦、ラズパイ組み立てて起動してみました。

f:id:kojirooooocks:20191109032753j:plain

f:id:kojirooooocks:20191109032811j:plain

起動できました!

さーて早速、、、と思ってたのですが、ここであることに気が付きました。

「有線のキーボート・マウスないやん。無線で接続する予定だったからLANケーブルもない...」

というわけで本当に起動までしか出来ませんでした。

キーボード・マウスも追加購入して、1日目はここまで。

現場からは以上です。

jsでのcsvダウンロード

はじめに

こんばんは。

ついに12月になりアドベントカレンダーが書き切れるかどうか不安な僕です。

とりあえず、気持ちを整理しつつ今回は、jsでのcsvダウンロードを試しました。

ちょこっとハマったので、残しておきます。

やってみた

最初は以下のサイトを参考に作ってみました。

https://codepen.io/dimaZubkov/pen/eKGdxN

export function csvExport(data: Object[]) {
  let csvContent = 'data:text/csv;charset=utf-8,'; 
  csvContent += [...targetData.map(item => Object.values(item).join(','))]
  .join("\n")
  .replace(/(^\[)|(\]$)/gm, "");

  const data = encodeURI(csvContent);
  const link = document.createElement("a");
  link.setAttribute("href", data);
  link.setAttribute("download", "download.csv");
  link.click();
}

ダウンロードは問題なく、表示も問題なさそうでした。

しかし自分は macのnumbersというアプリケーションでみていたので問題なく見えてるだけでした。

windowsExcelでは、カンマ区切りでセルが別れず、すべて1カラムに表示されていました。

うーんと調べていたところ、以下のサイトが見つかりました。

qiita.com

Bom付きでダウンロードさせるみたいです。

参考コードをそのまま使わせてもらいました。

それが以下です。

export function csvExport(data: Object[]) {
  const csvContent = [...data.map(item => Object.values(item).join(','))]
    .join('\n')
    .replace(/(^\[)|(\]$)/gm, '');

  let bom = new Uint8Array([0xef, 0xbb, 0xbf]);
  let blob = new Blob([bom, csvContent], { type: 'text/csv' });
  let url = (window.URL || (window as any).webkitURL).createObjectURL(blob);
  let link = document.createElement('a');
  link.download = 'download.csv';
  link.href = url;
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
}

このコードで、excelでもセルに分かれてきちんと表示されました。

また、TypeScriptで記述しているのですが、 参考のコードのままだと Property 'webkitURL' does not exist on type 'Window' というエラーが出ていたので、以下の対応をしております。

stackoverflow.com

終わりに

最近vueを業務で少しだけ触らしてもらっているのですが、面白いですね。

ReactとVueを勉強で少し触ったことあるのですが、個人的にはReactより遥かに簡単でした。

今後ももっと触れるように勉強しようと思います !

現場からは以上です。

ペン画の世界展に行ってきた

こんにちは。

今日は、家族の付き合いで、ペン画の世界展に行ってきました。

場所はこちら。

横浜のAAA GALLERY

https://artaraqasia.com/

なぜ、行くことになったかというと、自分の従兄弟の子供が、SNS経由で主催者から連絡を受けて、展示される事になったからです。

ペン画の世界展は、年に4回開催定期的に開催しているようなのですが、従兄弟の子供はまだ中学生で、中学生の展示は初の事らしいです!

その子のおじいちゃん。 つまり僕からいうと叔父さんは、プロの版画家さんで、既に他界してるのですが、その遺伝子がぴっちり行き渡っているのを見せつけられました。

撮影OKだったのでビシビシ撮ってきました。

僕は絵全く描けないので、素人目なのですが、中学生でこんなに書けてすげーなと思いました。

今月の28日まで開催しているので、横浜に立ち寄ることがあれば、是非みてあげてください!

入場無料です!!

ちなみにその子のインスタのアカウントは以下です。

自分が撮った作品以外もアップされてるので、是非みてあげてください。

https://instagram.com/eito319?igshid=1ldekxuyenr13