ソロギターのホームページですが、最近ラズパイの記事ばかりですいません。
私の中では、PS4を買った時よりも、熱中して楽しんでいます^^
余裕があれば、PS5も欲しいですがね!
16文字2行の液晶ディスプレイを堪能
この液晶ディスプレイ、パーツセットに入っていたもので、前回の8*8LEDドットマトリクスの次の課題が、これのレッスンでした。ただ、そのレッスン内容を見ると、
線を4本つなげて、制御用のオープンファイルをインポートして、ただ「hellow!」と打つだけ
の内容でしたので、う~ん、面白みがないやつだなと思いましたが、なんと・・・
制御用のオープンファイルをどこでダウンロードするのか書いていません!!
import LCD1602 と打ち込んでもエラーで弾かれます。
なので、自分で制御プログラムを組むことにしまして、まるっと正月休み2日分を消化しました。
躓きポイント
私、ラズパイを興味津々で購入する、自他とも認める理系タイプですし、仕事柄ちょっとした電気関係の補修をしたりするので、苦手意識があるわけでもありませんが、
LEDの抵抗なんで220Ω? 8*8LEDには抵抗つけなくてもいいの?
と、電子工作の知識は、中学生?レベルです。なんとなくトランジスタの仕組みがわかるぐらい。ましてや、液晶パネルなんて組み立てたことありませんし、30年間は電子工作と無縁の生活です。
そんな素人が、実際に組み立てしたときにツマズイタ所を記事にしてみます。だれかの役に立つことがくるでしょうか。
この手の小型液晶本体は恐らく、HD44780という制御IC、もしくはそれに準拠したICで制御されているもので、市場を占拠しているようです。
サイトキャラクタLCDモジュールの使いかたこちらのサイトをとても参考にしました。
問題なのは、売っているLCD1602液晶にドッキングしているI2Cインターフェイスでの制御方法が違う点と、I2Cを使わずに直接ラズベリーパイと接続できることです。
なぜ問題かというと、先人の方のプログラムを参考にする際、この通信・制御方法が違うと、プログラムも記述している命令コードも使いまわしできないことです。
パーツセットの説明書が微妙でしたので、書籍のLCDのページを見てプログラムを組んだのですが、文字が表示されませんでした。色々調べた結果、持っているLCDは4ビット制御、書籍で説明されているのは8ビット制御のLCDでした。
私が調べた限りでは、LCDモジュールの裏側に可変抵抗が付いているのは4ビット制御(PCF8574)、その可変抵抗(液晶のコントラスト調整)を後付けするタイプのI2Cモジュール付きのLCD(ACM1602NIが書籍に紹介)は8ビット制御、少し古いネットの記事ではI2Cを使わず、直接GPIO制御と、情報が入り乱れていて、目的の情報を手に入れるのが大変でした。
いや~冗談抜きで、購入した書籍、「入門ガイド」と詠っているくせに、まったく役に立ちません。これに3000円も払ったのは後悔です。次、参考書が欲しくなったときは、都会の本屋に行って、実際に使えそうな本を探さないといけませんね。
「入門ガイド」のくせに、肝心な所を省きすぎていて、とりあえず線をつなげて、制御ライブラリー入れて、表示してよしじゃ・・・いつまで経っても、スマホ制御のロボットなんて作れないぞ!!
と、私が調べた結果の簡単な情報は、最後のソースコードの説明欄に書いています。
基本的には、送信時は、「相手のデバイスアドレス、相手のデーター格納アドレス、入れたいデーター」。受信時は、「相手のデバイスアドレス、相手のデーター格納アドレス」を命令として出すようです。
今回使用したもの(PCF8574)は、「相手のデバイスアドレス、1回目のデーター送信(パラレル化)、2回目のデーター送信(パラレル化)」となっているようです。これに関して、確証となる情報見つけれませんでしたが、たぶんあっていると思う。
購入したパーツセットの付録CDに、LCD1602のデーターシートが入っていましたが、英語。
これを、ネットの無料PDF翻訳サイトで翻訳するも・・・、言葉足らずで理解できない所多数。
ネットで色んな方の翻訳?を見ても、どれも似たような記述で、わかりにくい。
結局、実際に命令を使って、その挙動を見て納得するしかありませんでした。
これも、私が調べた結果&素人目線での説明を、最後のソースコードに書いています。
私は、30年前にMSXで、「マシン語で直接VRAMの中にアドレス指定して文字を入れる」ことをしていたので、なんとなくデーターシートを見て仕組みが分かるのですが、それでも説明の意味が頭に入らないカタカナ語ばかりでした。
なので、私の説明書きは少しだけ分かりやすくなっているかも・・・。
ネットで見る限り、3Vの信号線を5Vにアップさせないといけないみたい。単独なら問題ないけど、ほかのI2Cデバイスを同時に接続した際に、問題が出るよう。
ただ、私はそのまま3Vで使用。何かアマゾンで購入する際に、ついでに購入予定ではあります。
色んな先人の方のプログラムを参考にして、オリジナルで組み上げましたが、この初期設定がかなり曲者でした。
データーシートには初期設定の方法が書いてなく、最初は単に4ビット制御の命令をセットアップ時に送ったけど、表示がバグりまくり。
次にネットの情報を参考に、0x33,0x32と初回の命令を真似したら、表示できたけど、たまに表示がバグる。
最終的に、0x33の初回の4ビット0b0011の命令後に4mSほど時間をあけないといけない仕様と判明。
色んな命令を試すたびに、なぜか表示がバグります。このバグの原因も最終的には、4ビット制御(2回受け取って8ビットに変換)しているため、何かの拍子でその受け取りに失敗すると、次から全部命令が4ビットずつ入れ違いになってバグると理解したのですが、その原因がシビアな待機時間調整。
全部長めにすれば問題解決するかと、安易に長くしてもダメでした。
この辺りは、データシートにそれらしき図と表が載っているのですが・・・、適当な解読というか、もうなんとなくの数値入れています。
これに関しても、先人の方のプログラムが0.00001sで制御してあったので、その数字を最初使っていたのですが、私の環境では、0.00002s必要で、画面クリアには0.00006sとか微調整が必要でした。
質問どんどん待ってます!
え~ソロギターのサイトですが、楽しんで電子工作した過程を、誰が読むのか分からないけど、ひたすら書くのも楽しいです。自己顕示欲ですけどね~。
ここで書ききれなかった事沢山ありますし、この4ビット制御のLCD1602に関しては、かなりマスターしたと自負しています^^
どしどし質問お待ちしています~♪ & 何かプログラム上、おかしな点ありましたらご教授お願いします。
#I2Cを有効にする方法 ラズベパイの設定→インターフェイス→I2Cを有効 #もしくはコマンドで、sudo reapi-config を実行し、5 Interfacing Options ⇒ P5 I2C と進み, YESを選択 #I2Cで制御する相手のアドレスを確認する。 #コマンドで、sudo i2cdetect -y 1 を実行し確認。16進数表記。 #I2Cの制御の基本(I2Cデバイスからのデーター読み込み) #コマンドで、sudo i2get -y 1 0x27 0x01 。0x27はデバイスのアドレス 0x01はデバイスのデータアドレス。 # 順番はデバイスアドレス 読み込みたいデータアドレス #I2Cの制御の基本(I2Cデバイスへのデータ書き込み) #コマンドで、sudo i2set -y 1 0x27 0x06 0xF0 。0x27はデバイスのアドレス 0x06はデバイスのデータア #ドレス 0xF0は書き込みたいデータ。 # 順番はデバイスアドレス 書き込みたいデータアドレス 書き込みデータ #Pythonでの基本操作 #import smbus #import time #SMBusの引数に1を指定する。Raspberry Piのi2cバスの番号 #i2c = smbus.SMBus(1) #デバイスのアドレス 0x68 #addr = 0x68 #1バイト データの書き込み #コマンドフォーマット アドレス 書き込みたいデータのアドレス 書き込むデータ #i2c.write_byte_data(addr, 0x06, 0xF0) #複数バイト データ書き込み #コマンドフォーマット アドレス 書き込みたいデータのアドレス 書き込むデータ(配列) #i2c.write_i2c_block_data(addr, 0x07, [0x02, 0x01]) #1バイト データ読み込み #コマンドフォーマット アドレス 読み込みたいデータのアドレス #data = i2x.read_byte_data(addr, 0x05) #print(data) #ラズパイのI2Cは3.3V。制御機器が5Vの場合、信号を5Vにアップする必要があり。 #LCD1602の説明(I2Cの部分除く 命令コード) #7654 3210b hex #0000 0001 01 DDRAM(液晶に表示される字のコードが、表示される場所に対応したアドレスに格納されている。) #をすべて空白(コード0x20)で埋め、アドレスカウンターに1桁目1行目のDDRAMアドレス0x00をセットする。 # 液晶の字を空白に埋めて、左上にカーソル待機(アドレスカウンタ=カーソルの位置)。 #0000 0010 02 アドレスカウンターにDDRAMアドレス0x00をセット。カーソル左上に。 #0000 0011 03 未使用(不明) #0000 01** カーソルの動きを設定表示シフトONの場合、文字を表示した際自動でシフトする。 # 100 04 表示シフトOFF(カーソル左へ)実用性? # 101 05 表示シフトON (カーソル左へ)実用性? # 110 06 カーソル右(文字の表示方向右に設定) 表示シフトOFF # 111 07 カーソル右(文字の表示方向右に設定) 表示シフトON #0000 1*** 表示の設定 1DCB D=文字 C=カーソルの表示 B=下線かブロックか # 1000 08 文字OFFのため # 1011 0B 08~0Bの使用? # 1100 0C 文字ON カーソルOFF # 1101 0D 文字ON カーソルOFF # 1110 0E 文字ON カーソルON 下線カーソル # 1111 0F 文字ON カーソルON ブロックカーソル点滅 # この下線カーソルと、ブロックカーソルの指定が、データーシートと違う・・・読み方が違うのか。 #0001 **xx カーソルの移動、表示シフトの命令(後ろ2ビット未使用) # 1 0000 10 カーソルが左移動 (字は消えない) # 1 0100 14 カーソルが右移動(字は消えない) # 1 1000 18 表示シフト 左 (強制的にシフトできるが、次の文字を入れたらもとに戻る) # 1 1100 1C 表示シフト 右(強制的にシフトできるが、次の文字を入れたらもとに戻る) #001d nfxx 設定(4ビットか8ビット、液晶の行数、字の大きさ) # d=0 4bit d=1 8bit。n=1 2ライン n=0 1ライン。f=0 通常の5*7 f=1 5*10 # (特殊な液晶画面で qとかgを表現) # 4ビットか8ビットかは、I2Cの使用するIC回路で違う。(LDCとの中継が4本か8本か) # ラインは、液晶によっては、1行40文字(2行なし)とかあるため。 #0010 1000 28 4ビット、2行表示、通常文字サイズ #0011 1000 38 8ビット、2桁表示、通常文字サイズ #01** **** オリジナル文字の格納アドレスを指示。指示したあとにドットデーターを書き込めれる。 #1*** **** 80~ 一行一文字目 0x80 文字コードの格納アドレスを指定、カーソル位置セット #上の命令は RS とR/W が 0のとき #RS=0 R/W=1 で、カーソル位置のアドレス取得とビジー状態取得 多分PCF8574ではできない。 #RS=1 R/W=0 で、文字コード書き込み(文字のアスキー番号、カタカナは指定) # 事前にオリジナル文字のアドレス設定していた場合は、ドットデータ書き込み #RS=1 R/W=1 で、文字コード読み込み(今何が液晶に表示されているか、文字コード取得) # PCF8574というI2Cシリアルインターフェイスで可能か不明 #よって、LCD1602を制御するには、10本の信号線と、タイミング線、 # 計11本の信号線画必要(8ビットの場合) #4bビットの場合 2+4本の信号線、1本のタイミング線で7本の信号線必要 #PCF8574というI2Cシリアルインターフェイスを使う場合、 # 2+4本の信号線、1本のタイミング線、残り1本はバックライト制御となっている。 import smbus import time I2C = smbus.SMBus(1) #1番のI2Cバスを指定 ラズパイに2があるかは? I2C_add = 0x27 #LCDに付属のインターフェイスのアドレス CODE_RS0 = 0b0000000 #LCDのRS (レジスタの選択 0=命令用) CODE_RS1 = 0b0000001 #LCDのRS (レジスタの選択 1=書き込み用) # 0b0000010 #LCDからカーソルの位置とビジー状態習得 # PCF8574というI2Cシリアルインターフェイスで可能か不明 # 0b0000011 #LCDから表示している文字コード取得 PCF8574でできるかは不明 CODE_E = 0b0000100 #LCD Enable 1から0になると、LCDの制御ICがデータ処理実行 CODE_LED = 0b00001000 #LCDのバックライト 1点灯 0消灯 mojisuu = 16 #ディスプレイの横文字数 (空白で埋めるために使用) LINE1 = 0x80 #上段の左端アドレス 0x80 ~ 0x8f までの16文字分 LINE2 = 0xC0 #下段の左端アドレス 0xc0 ~ 0xcf までの16文字分 LIN8C = 0x80 #文字表示任意の場所を指定用 上段の5番目 0x85 下段の12番目 0xcc等 def I2C_write(bits,mode):#bits=各命令,文字コード mode=制御用(RS R/W E LED点灯) #変数bitsの命令(8bit)を半分の4bitづつ送る。 #DB7 DB6 DB5 DB4 LED E R/W RS の情報を送る。 #I2C.write_byte_data(I2Cアドレス,1回目のシリアルデーター、2回目のシリアルデーター)と処理 #1回目のシリアルデーターにEN信号を入れ、2回目のデーターにEN信号がないため読み込まれる。 #data = (bits & 0xF0) | mode | CODE_LED # & F0 によって変数bitの右側4ビットを0に # |mode で変数modeの4ビット加える I2C.write_byte_data(I2C_add,(data | CODE_E),(data)) time.sleep(0.0002)#0.0001だとLCD側の処理が間に合わない。 #残り半分の転送 #DB3 DB2 DB1 DB0 LED E R/W RS の情報を送る。 data = ((bits << 4) & 0xF0) | mode | CODE_LED # << 4 4ビット左に移動 I2C.write_byte_data(I2C_add,(data | CODE_E),(data)) time.sleep(0.0002) def LCD_set():#初期設定 4ビットへの設定 data = (0x33 & 0xF0) | 0x00 | CODE_LED I2C.write_byte_data(I2C_add,(data | CODE_E),(data)) time.sleep(0.005)#0.004以上あける。 I2C.write_byte_data(I2C_add,(data | CODE_E),(data)) time.sleep(0.0002)#0.00001以上あける startcom = [0x32,0x28,0x0c,0x01,0x02] for command in startcom: I2C_write(command,CODE_RS0) I2C_write(0x06,CODE_RS0) #0x33 LCD側の8ビットと4ビット通信初期化のため 0b0011 0b0011 0b0011を3回連続で流す #仕様的には、1回目の0011→4ms以上あける→2回目の0011→100us以上あける→3回目の0011 #0x32 3回目の0b0011のあとに 0b0010を流すことによって、4ビットモードになる #0x28 4ビット2桁通常文字 #0x0c 文字ON カーソル表示OFF #0x01 空白で埋めて、カーソル左上に固定される(なにか表示するまで固定) #0x02 これを入れないと、シフトで文字移動したあと、カーソルと表示位置がずれる(詳細不明) #0x06 カーソル右向き 表示シフトOFF これを最後にしないと、 #最初に下段表示(カーソルの位置)ができない。 #ここまでの各処理に間があくと、4ビットモードにならない。 #time.sleep(0.0003)とか入れると4ビットモードにならない→バグる def LCD_clear():#画面クリア clearcom = [0x0c,0x01,0x02,0x06] for command in clearcom: I2C_write(command,CODE_RS0) time.sleep(0.0006) #消去するのに処理落ちするため、長めに間をあける。0.0004でバグ発生(4ビットの通信がずれるから?)。 #0x0c 文字ON カーソル表示OFF #0x01 空白で埋めて、カーソル左上 #0x02 これを入れないと、シフトで文字移動したあと、カーソルと表示位置がずれる(詳細不明) #0x06 カーソル右向き 表示シフトOFF def LCD_text(message,line):#指定した行にまとめてmessage書き込み message =message.center(mojisuu," ") #左,右寄せ、中央 ほかを空白で埋める rjust, ljust, center I2C_write(line,CODE_RS0)#行を指定 上0x80 か 下0xc0 で左端から for i in range(mojisuu): I2C_write(ord(message[i]),CODE_RS1)#LCDのRSを1、文字コード指定 #文字コードを送る前に、カーソルの位置を知らせる命令を出す必要あり。 def LCD_moji(message,line):#指定した場所にmessage書き込み(上書き) I2C_write(0x0f,CODE_RS0)#カーソルon ブロック 0x0e下線 I2C_write(line,CODE_RS0)#位置を指定 上0x80 か 下0xc0 で左端から for i in range (len (message)): I2C_write(ord(message[i]),CODE_RS1) def LCD_katakana(message,line):#指定した場所にmessage書き込み(上書き)カタカナ指定文字 I2C_write(0x0f,CODE_RS0)#カーソルon ブロック 0x0e下線 I2C_write(line,CODE_RS0)#位置を指定 上0x80 か 下0xc0 で左端から for i in range (len (message)): I2C_write(message[i],CODE_RS1) def LCD_tuiki(message):#LED_mojiのあとの追記用 for i in range (len (message)): I2C_write(ord(message[i]),CODE_RS1) def LCD_l_move(kazu,hayasa):#文字を左へスクロール 変数kazu分 早さは変数hayasa I2C_write(0x0c,CODE_RS0)#カーソル表示OFF I2C_write(0x07,CODE_RS0)#シフト機能ON for i in range (kazu): I2C_write(0x18,CODE_RS0) time.sleep(hayasa) I2C_write(0x06,CODE_RS0)#シフト機能OFF I2C_write(0x02,CODE_RS0)#カーソル戻す def LCD_r_move(kazu,hayasa):#文字を右へスクロール 変数kazu分 早さは変数hayasa I2C_write(0x0c,CODE_RS0)#カーソル表示OFF I2C_write(0x07,CODE_RS0)#シフト機能ON for i in range (kazu): I2C_write(0x1C,CODE_RS0) time.sleep(hayasa) I2C_write(0x06,CODE_RS0)#シフト機能OFF I2C_write(0x02,CODE_RS0)#カーソル戻す def LCD_back(kazu): for i in range (0,kazu): I2C_write(0x10,CODE_RS0)#左にカーソルを移動する(字は消えない) def LCD_insert(message,hayasa):#入力した際に、文字を左へスクロール カーソルの位置固定 I2C_write(0x07,CODE_RS0)#シフト機能ON for i in range (len (message)): I2C_write(ord(message[i]),CODE_RS1) time.sleep(hayasa) I2C_write(0x06,CODE_RS0)#シフト機能OFF I2C_write(0x02,CODE_RS0)#カーソル戻す def LCD_original(): I2C_write(0x40,CODE_RS0) #オリジナル文字 1文字目のアドレス指定 #2文字目は0b01001000 0x48 #3文字目は0b01010000 0x50、以降0x58 0x60 0x68 0x70 0x78 の計8文字 # 0bxxx00000 左3ビット使わない 5*7ドット I2C_write(0b00000,CODE_RS1) I2C_write(0b00010,CODE_RS1) I2C_write(0b00101,CODE_RS1) I2C_write(0b01000,CODE_RS1) I2C_write(0b01100,CODE_RS1) I2C_write(0b00110,CODE_RS1) I2C_write(0b00001,CODE_RS1) I2C_write(0b00000,CODE_RS1)#カーソル用の空白使えない。続けて文字を作成するためには、0で書き込み I2C_write(0b01110,CODE_RS1) I2C_write(0b10001,CODE_RS1) I2C_write(0b00000,CODE_RS1) I2C_write(0b00000,CODE_RS1) I2C_write(0b01010,CODE_RS1) I2C_write(0b00000,CODE_RS1) I2C_write(0b00000,CODE_RS1) I2C_write(0b00000,CODE_RS1)#カーソル用の空白使えない。続けて文字を作成するためには、0で書き込み I2C_write(0b00100,CODE_RS1) I2C_write(0b01010,CODE_RS1) I2C_write(0b10011,CODE_RS1) I2C_write(0b00001,CODE_RS1) I2C_write(0b00010,CODE_RS1) I2C_write(0b01100,CODE_RS1) I2C_write(0b10000,CODE_RS1) I2C_write(0b00000,CODE_RS1)#カーソル用の空白使えない。続けて文字を作成するためには、0で書き込み I2C_write(0b00111,CODE_RS1) I2C_write(0b01000,CODE_RS1) I2C_write(0b00011,CODE_RS1) I2C_write(0b01110,CODE_RS1) I2C_write(0b00001,CODE_RS1) I2C_write(0b00110,CODE_RS1) I2C_write(0b00000,CODE_RS1) I2C_write(0b00000,CODE_RS1)#カーソル用の空白使えない。続けて文字を作成するためには、0で書き込み I2C_write(0b10001,CODE_RS1) I2C_write(0b10101,CODE_RS1) I2C_write(0b01110,CODE_RS1) I2C_write(0b10001,CODE_RS1) I2C_write(0b01110,CODE_RS1) I2C_write(0b00000,CODE_RS1) I2C_write(0b00000,CODE_RS1) I2C_write(0b00000,CODE_RS1)#カーソル用の空白使えない。続けて文字を作成するためには、0で書き込み I2C_write(0b11110,CODE_RS1) I2C_write(0b00001,CODE_RS1) I2C_write(0b11100,CODE_RS1) I2C_write(0b00110,CODE_RS1) I2C_write(0b11011,CODE_RS1) I2C_write(0b01000,CODE_RS1) I2C_write(0b00110,CODE_RS1) I2C_write(0b00000,CODE_RS1)#カーソル用の空白使えない。続けて文字を作成するためには、0で書き込み def LCD_led():#LEDライトの消灯 CODE_LED = 0 data = (0 & 0xF0) | CODE_RS0 | CODE_LED I2C.write_byte_data(I2C_add,(data | CODE_E),(data)) time.sleep(0.0002) #命令を2回流さないと、4ビットのずれが出てバグる data = (0 & 0xF0) | CODE_RS0 | CODE_LED I2C.write_byte_data(I2C_add,(data | CODE_E),(data)) time.sleep(0.0002) def main(): LIN8C = 0xC3 #下段の3番目から表示 kanacode = [0xca,0xbc,0xde,0xd2,0xcf,0xbc,0xc3,0x21] LCD_katakana(kanacode,LIN8C) time.sleep(1) LCD_text('Hello!',LINE1) time.sleep(1) LCD_l_move(13,0.5) #13文字分左にスクロール LCD_clear() LCD_led() time.sleep(2) LIN8C = 0x83 kanacode = [0xd0,0xb7,0xde,0xc6,0xb2,0xc4,0xde,0xb3] LCD_katakana(kanacode,LIN8C) time.sleep(1) LCD_tuiki(">>>") time.sleep(1) LCD_back(12) time.sleep(1) LCD_tuiki("right move!") time.sleep(3) LCD_insert(">>>>",1) LCD_r_move(13,0.5) LCD_clear() LCD_original() I2C_write(0x85,CODE_RS0) I2C_write(0x00,CODE_RS1) I2C_write(0x01,CODE_RS1) I2C_write(0x02,CODE_RS1) LCD_moji('Dog?',0x8a) I2C_write(0xc5,CODE_RS0) I2C_write(0x03,CODE_RS1) I2C_write(0x04,CODE_RS1) I2C_write(0x05,CODE_RS1) LCD_moji('Cat?',0xca) time.sleep(5) LCD_l_move(16,0.8) LCD_clear() LCD_text("END",LINE2) time.sleep(2) LCD_clear() LCD_led() try: LCD_set() main() except KeyboardInterrupt: pass
コメント
こんにちは。UMEです。
うひょー! 出たHD44780!
昔々、制御プログラムを作ったことがあり、とても懐かしいです。
組み込み系のCPUでGPIOでI2Cを模倣して制御したかなぁ。。。
やっぱり初期化でどハマりして苦しんだ覚えがあります。
プログラム上に書いたウエイト時間が、信号線の動き上はどこからどこまでの時間か、という辺りに着目したら解決したかなぁ。
あと、IC内の全レジスタと全バッファに、全て初期値を書き込んだ覚えがあります(ICの初期値を信頼しない)。
このテのハナシを書き込めるところが出来て嬉しいです。
本年もよろしくお願いします。
UMEさん、こんにちわ^^
今日アップした記事には書いていませんが、コロナの濃厚接触者の濃厚接触者となりまして、自宅でまったりラズパイとギターを楽しんでいます。
感染爆発の影響をヒシヒシと感じています。
そっか、信号線の長さや品質も影響しますよね~。
今日、東海地方もめちゃ寒いですが、その影響もあるのか、少しLCD液晶が不安定(なぜか表示されなくなる)だったりしますし。
なんか、全クリアリセット時の挙動が怪しいのは、やはり全部を0で埋めたいところですね。
この電子工作のパーツ、ネタ、沢山ありすぎるので、さすがにYoutubeのチャンネル分けてみました。
こちらこそ、よろしくお願いします!
(あれ?数日前に書き込んだつもりなんだけれども、もう一度)
コン太郎さん、新年おめでとうございます。
ラズパイとはまた奇妙なもののはまっていますね。私は名前すら知りませんでした。
正直今回の動画も、演奏内容よりも猫たちが気になってしょうがないです(笑)。
2匹とも元気そうですね。
こっちも元気ですが、そろそろ避妊手術の時期なのに、かわいそうなんで引き伸ばしてばかりいます・・・。
おはようございます。
すいません、もう片方のラズパイの記事です、コメント。
「君をのせて」のほうです。
とまあ、今年もよろしくお願いします。
猫たちは今日も元気に朝からゴハン頂戴攻撃してきます^^
失礼致しました。Amazonで日本のラズベリーパイを販売している林遠です。
ブログを拝見しました。弊社のラズベリーパイカメラレビューブログ記事を書きしてくれませんか。
こちらは無料でサンプルを提供します。
連絡メールはjp02@vertue.cnです。
御返事お待ちしております。どうぞよろしくお願いします。
林遠さん、初めまして。
大変興味深いし、ペットの見守りカメラとかを作ってみたいとは思っていますが、
すでにラズベリーパイで遊ぶのに飽きているのと、
カメラの制御プログラムを組むのに現状自信がないのと、時間的な余裕もないため、今すぐこちらから連絡しませんのでご了承ください。
正月休みやら、時間に余裕が出て、ラズパイいじりを再開したら声おかけしますかも!