fc2ブログ

Raspberry pi4が届いた!

予約していたラズパイ4が27日朝に届きました。
先に紹介しましたLEDマトリックスディスプレイにラズパイZeroを使ったのが切っ掛けでラズパイに嵌り、技適マークが
付いた製品の販売を予約していました。
Raspi4_1.jpg

基板表側は先に販売されていた技適マークの無い製品と同じです。
Raspi4_2.jpg

基板裏側には、申し訳程度の大きさで技適マークが印刷されていました。
Raspi4_3.jpg

先に準備していたファン付きアクリルケースに入れて早速動かせてみました。
このケースはAMAZONにて購入、3Aの専用電源とセット(送料込み1999円)ですが、評判が良くて現在は在庫なし。
Raspi4_4.jpg

ラズパイ4を使ってみての感想ですが、先に使ったZeroの処理能力が低かっただけにビックリするほど早く、
WebやYouTubeの閲覧もストレスなく出来る小さな!小さな!PCとしても使えそうです。
先ずは、覚え始めたPythonの練習を兼ねて遊んでみたいと思います。
Raspi4_5.jpg

皆様の参考になれば幸いです。

スポンサーサイト



テーマ : 電子工作
ジャンル : 趣味・実用

LEDマトリックスモジュールで遊ぶ その4(最終回) Raspberry pi 編

その4 Raspberry pi Zero WとBlynkを使ったメッセージボードの紹介
Cytron社のRaspberry pi Zeroを使ったtutorialページを参考にさせて頂きました。
2019年11月24日

Raspberry pi Zero WのOSインストール方法は、インターネット上にたくさん紹介されているのでここでは省略します。
私自身初めてのPaspberry piと初めてのPythonですが、購入から3週間で工作を含めて完成出来ました。
ここでは、LEDマトリックスモジュールで遊ぶ その3と重複する部分は省略しています。その3と併せてご覧下さい

今度のメッセージボードの特長は通常時計が表示され、メッセージ信号が入るとBeep音を発し、メッセージを
スクロール表示します。tutorialではマトリックスボードが1枚(8X8X4)ですが、見易くするために2枚連結しました。
RasPi_Blynk_Message_Board1.jpg

回路図
tutorialではMaker pHAT(拡張基板)を使っていますが、ここでは秋月電子の1枚100円の拡張基板に必要な部品を
組み込んで使いました。 メッセージ着信時に送信側スマホへ確認を通知するためのスイッチを追加しました。
Raspberry1-1.gif

背面1 今回も前回同様にアクリル板をCNC加工して作りました。左側の黒い部品は圧電ブザーですが、
手持ち部品を使ったのでケースの外に設置しました。
RasPi_Blynk_Message_Board2.jpg

背面2 カバーを外すとRaspberry pi Zeroと拡張基板が見えます。
RasPi_Blynk_Message_Board3-A.jpg

RaspberryPi Zero Wと拡張基板の様子
赤く見えるのが追加したタッチスイッチです。回路図ではpushスイッチですが、配線を引き出すのが一手間なので
アクリルカバーの外から操作が出来るタッチスイッチを拡張基板に取り付けて使いました。
RasPi_Blynk_Message_Board4-A.jpg

スマートフォン側 Blynk APPの変更箇所について
Blynkの設定方法は、その3とほぼ同じです。その3 前編と併せてご覧下さい。
①デバイスの選択をRaspberry pi Zero Wが無いのでRaspberry pi 3Bを選びます。
②次はtutorialに無い通知機能を追加します。Widget Boxを開き、Notificationを追加します。
③追加したNotificationをText Inputの下辺りに配置します。
④LEDボードにメッセージが届いた後、本体拡張基板に追加したタッチスイッチに触れると、スマホの画面に確認の
 メッセージが表示され、メッセージが届いたことを通知します。通知はOKをタップすると消えます。
Blynk_11.jpg Blynk_12.jpg Blynk_13.jpg  Blynk_14.jpg

ソースコードについて
tutorialのソースコード(Python)に少し手を加えましたので変更部分を#にて記します。
以下のプログラム実行には、blynk-library-pythonとLuma.LED_Matrixをインストールしておく必要が有ります。
ここで使ったLEDマトリックスボードは、LumaライブラリーがサポートするFT16タイプです。表示方法が異なる
IC STATIONは使えません。ライブラリーを修正すれば可能だと思いますが試していません。

#Blynk_LED_MatrixMessageBoard.py
from gpiozero import Buzzer, Button
import BlynkLib
from time import time, sleep, strftime
from datetime import datetime
import sys

#lumaledライブラリーでは、LEDマトリックスボードを”FT16”タイプをサポート、IC STATIONは使えません。

from luma.core.interface.serial import spi, noop
from luma.core.render import canvas
from luma.core.virtual import viewport
from luma.led_matrix.device import max7219
from luma.core.legacy import text, show_message
from luma.core.legacy.font import proportional, CP437_FONT, LCD_FONT

buzzer = Buzzer(26) #GPIO26にBUZZERを接続
sw1 = Button(21) #GPIO21にメッセージ確認用SWを接続
BLYNK_AUTH = 'Blynkから割り当てられたTOKEN 記号を入力'

# Initialize Blynk
blynk = BlynkLib.Blynk(BLYNK_AUTH)

#以下の5行を追加したWidget Notificationの記述を追加しました。
def sw1Pressed():
buzzer.beep(0.1, 0.1 ,1)
print('SW1 is pressed')
blynk.notify('Confirm receipt! OK.') #()内に通知文章を記述します。

sw1.when_pressed=sw1Pressed

# Register Virtual Pins
@blynk.VIRTUAL_WRITE(0)
def my_write_handler(value):
global counter
global BlynkText
buzzer.beep(0.1, 0.1, 1)
#(0.1, 0.1, 1)()内の数値は左からbeep音の長さと間隔で右端が回数です。
BlynkText = format(value[0])
print('Blynk Text: {}'.format(BlynkText))
counter = 1

serial = spi(port=0, device=0, gpio=noop())
#マトリックスボードを追加したのでwidthを32から64に変更
device = max7219(serial, width=64, height=8, block_orientation=-90)
#widthを32から64に変更
device.contrast(5) #LEDの輝度が設定出来ます。
virtual = viewport(device, width=64, height=8) #widthを32から64に変更

def millis():
return time() * 1000

def my_user_task():
global counter
global BlynkText
print('Counter = {}'.format(counter))
if counter == 0:
buzzer.beep(0.1, 0.1, 2)
show_message(device, 'Blynk Ready', fill="white", font=proportional(LCD_FONT), scroll_delay=0.05)
counter = 3
elif counter < 4:
if len(BlynkText) > 0:
show_message(device, BlynkText, fill="white", font=proportional(LCD_FONT), scroll_delay=0.04)
#scroll_delay=0.08を0.04に変更
else:
counter = 3
else:
if counter == 6: #counter == 10を6に変更。(時計表示とメッセージ表示の比率を自分好みに変更)
counter = 0
with canvas(virtual) as draw:
#時計を表示するtext(draw, (1, 1)を(16, 1)に変更してボード中央(16ドット目から)に表示としました。
text(draw, (16, 1), datetime.now().strftime('%I:%M'), fill="white", font=proportional(CP437_FONT))

counter = counter + 1

counter = 0
BlynkText = ''
currentMillis = 0
previousMillis = 0
interval = 5000

try:
while True:
blynk.run()

currentMillis = millis()
if currentMillis - previousMillis > interval:
my_user_task()
previousMillis = currentMillis

except KeyboardInterrupt:
sys.exit(0)


動画をご覧下さい。


皆様の参考になれば幸いです。

テーマ : 電子工作
ジャンル : 趣味・実用

LEDマトリックスモジュールで遊ぶ その4

RaspberryPi Zero Wを使ったLEDメッセージボードの紹介。
初めてRaspberry Piを使いましたが、今までのマイコンと違い小さなPCと言う感覚です。
Pythonも初めてなのでゼロからのスタートですが、購入から3週間で完成すことが出来ました。
前回同様にスマホのBlynkアプリを使ってローカルネットワークの外からメッセージを送ります。
今回もCytron社のtutorialページを参考にマトリックスモジュールを増すなど自分なりの工夫をしました。

今回は先ず動画のみ紹介します。



次回は詳細記事を掲載します。

皆様の参考になれば幸いです。

テーマ : 電子工作
ジャンル : 趣味・実用

LEDマトリックスモジュールで遊ぶ その3 後編

ローカルネットワークの外からメッセージを送る。(後編)
2019年11月8日
MVI_2708_Moment.jpg

ソースコード
参考にさせて頂いたCytron社のtutorialページに基になったソースコードが見れます。
ESP8266用とArduinoUNO用に分かれていたソースコードを統合してWROOM-02単体で動くようにしました。
当初、SoftwareSerialを使わずにBlynkから受け取ったMessageをSerial readで読み取って処理するつもりでしたが、
老人の私には上手く出来ずに諦めました。そこで苦肉の策としてSoftwareSerialを使って一旦GPIO5とGPIO4に出力
した後、RXとTX端子に戻す方法を採りました。


#include "ESP8266WiFi.h"
#include "BlynkSimpleEsp8266.h"
#include "MD_Parola.h"
#include "MD_MAX72xx.h"
#include "SPI.h"
#include "SoftwareSerial.h"
SoftwareSerial blynkSerial(5,4); //GPIO5,GPIO4に出力

char auth[] = "Blynkから通知された「AUTH TOKEN」を記入";
char ssid[] = "ルーターのID";
char pass[] = "ルーターのpassword";

// Define the number of devices we have in the chain and the hardware interface
// NOTE: These pin numbers will probably not work with your hardware and may
// need to be adapted
#define HARDWARE_TYPE MD_MAX72XX::ICSTATION_HW //使用するHWを記入
#define BLYNK_PRINT Serial
#define MAX_DEVICES 8 //MAX_DEVICESを8個使用
#define CLK_PIN 14
#define DATA_PIN 13
#define CS_PIN 15
#define NOTE_G4 392
#define NOTE_B4 494
#define BUZZER 12 //着信音

int melody[] = {NOTE_B4, NOTE_G4};
int noteDurations[] = {8, 8};

//HARDWARE SPI
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

//Scrolling parameters
static uint8_t intensity = MAX_INTENSITY/15; //追加:LEDの輝度を調整0-15、0=MAX
uint8_t scrollSpeed = 25; // default frame delay value
textEffect_t scrollEffect = PA_SCROLL_LEFT;
textPosition_t scrollAlign = PA_LEFT;
uint16_t scrollPause = 2000; // in milliseconds

// Global message buffers shared by Serial and Scrolling functions
#define BUF_SIZE 75
char curMessage[BUF_SIZE] = { "" };
char newMessage[BUF_SIZE] = {"Blynk Message"};
bool newMessageAvailable = true;

BLYNK_WRITE(V0) {
String textIn = param.asStr();
Serial.print(textIn + "\n");
}

void readSerial(void){
static char *cp = newMessage;
while (blynkSerial.available()) {
*cp = (char)blynkSerial.read();
if ((*cp == '\n') || (cp - newMessage >= BUF_SIZE - 2)) { // end of message character or full buffer
*cp = '\0'; // end the string
// restart the index for next filling spree and flag we have a message waiting
cp = newMessage;
newMessageAvailable = true;
}
else // move char pointer to next position
cp++;
}
delay(10);
}

void setup() {
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
Serial.print("Blynk Ready\n");
Serial.print("\n[Parola Scrolling Display]\nType a message for the scrolling display\nEnd message line with a newline");
blynkSerial.begin(9600);
P.begin();
P.setIntensity(intensity); //追加:LEDの輝度をSET
P.displayText(curMessage, scrollAlign, scrollSpeed, scrollPause, scrollEffect, scrollEffect);
delay(5000);
}

void loop() {
Blynk.run();
if (P.displayAnimate()) {
if (newMessageAvailable) {
beep();
strcpy(curMessage, newMessage);
newMessageAvailable = false;
}
P.displayReset();
}
readSerial();
}

void beep() {
for (int thisNote = 0; thisNote < 2; thisNote++) {
int noteDuration = 1000 / noteDurations[thisNote];
tone(BUZZER, melody[thisNote], noteDuration);
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
noTone(BUZZER);
}
}


動画をご覧下さい。


皆様の参考になれば幸いです。

テーマ : 電子工作
ジャンル : 趣味・実用

LEDマトリックスモジュールで遊ぶ その3 前編

ローカルネットワークの外からメッセージを送る。
2019年11月3日
先に紹介しましたLEDマトリックスモジュールで遊ぶ その2では、ローカルネットワークの外からメッセージを送ることが
出来ません。 そこで、外部からローカルネットに接続する方法を色々と試した結果、スマホアプリのBlynkを使うのが、
一番簡単で安全にローカルネットに接続出来て、何処からでもメッセージをが送れるようになりました。

LEDマトリックスボードの台座を固定式からチル機構を追加して角度が変えれるように変更しました。
MVI_2708_Moment.jpg

Blynkを使ったLEDマトリックスボードにメッセージを送る例が無いか調べたら、イギリスのCytron社が詳しいtutorialを
公開されていました。tutorialではArduinoUNOとESP8266シールド基板を組み合わせた回路ですが、私は先に作った
LEDマトリックスボードの僅かな回路変更により、ESP8266 WROOM-02単体で実現出来ました。
参考にしたソースコードはArduinoUNO用とESP8266用に分かれてますが、これを統合して使いました。詳細は後編に
記述します。先ずは、参考にさせて頂いたCytron社に感謝いたします。

回路図
その2 回路図の変更部分(朱書き):ESP-WROOM-02のGPIO5とTXD、GPIO4とRXDを接続とブザーの追加。
Blynk_Message_Board_New.gif

Blynkのインストールと設定について
スマホアプリのBlynkをインストールしますが、iPhoneとAndroidの両方に対応してます。左上から順番に①・・・
①インストルール初期画面のアカウント作成を選択します。
②メールアドレスとパスワードを登録します。
③この画面の一番下Email allをクリックすると登録したEメールに「AUTH TOKEN」が送られてきます。
注意:この「AUTH TOKEN」が後で作成するソースコードに必要となります。
④プロジェクト名を入力とその下側の使用モジュールを選択、ここではESP8266とし、下のCreateボタンを押す。
Blynk_1.jpg Blynk_2.jpg Blink_2b.jpg  Blynk_3.jpg
⑤プロジェクト画面が開いたら右上の丸✙のを選択するとwidget Boxが開きます。
⑥widget Boxの下の方にText inputを選択し、Text input Setting画面を開きます。
⑦Text input Setting画面ではPINを選択します。
⑧次にSelekut pinのVitualとV0を選択してOKをクリックするとText input Settin画面に戻ります。
Blynk_4.jpg Blynk_5.jpg Blynk_6.jpg Blynk_7.jpg
⑨この画面下側のCHARACTER LIMIT枠に50から100位を入力し、一番上左端の←をクリックします。
⑩プロジェクトと画面に表示されたText inputボックスを見易い位置に移動と幅の調整をします。
⑪一番上右端の▷マークをクリックするとプロジェクトが完了です。ここにメッセージを入力してエンターキーを押すと
メッセージが送信されます。
Blynk_8.jpg Blynk_9.jpg Blynk_10.jpg

動画をご覧下さい。


皆様の参考になれば幸いです。

テーマ : 電子工作
ジャンル : 趣味・実用

プロフィール

CNC_Paradise

Author:CNC_Paradise
木工・彫刻・機械工作・電子工作が
大好きで自作のCNCを使って工作を
楽しんでます。

最新記事
最新コメント
月別アーカイブ
カテゴリ
何でも工作室
検索フォーム
RSSリンクの表示
リンク
QRコード
QR