フォト
2021年8月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
無料ブログはココログ

Raspberry Pi

2021年3月29日 (月)

Raspberry Pi PicoにUSBキーボードを繋げてみる

Raspberry Pi Picoには、USBホスト機能(USBデバイスを接続できる)があります。
早速動作確認してみました。
結果を先に述べると、利用出来ますね! よしよし (*´ω`*)


■ 利用したサンプルプログラム
   pico-examples/usb/host/host_hid

上記のサンプルは、pico-exsamplesの一括コンパイル時にビルドされますが、
後々の調査・改造のため、今回はこれだけを取り出してビルドしました。

実験の様子
Dscn3018

動作確認出力はPCとのUSB接続出来ないため、シリアルポート経由で行いました。
USB-UARTモジュールを利用し、picoへの5V電源供給もこのモジュールから行いました。
プログラムの書き込み後、マイクロUSBコネクタには変換ケーブルを接続してキーボードを接続しました。

Dscn3022

picoへの5V供給は、40ピンのVBUSから行っています(写真の右側の赤線⇒VBUS、黒線⇒GND )。
これによりUSBデバイスへの5V供給を行うことが出来ます。
動作確認出力はシリアル通信 1ピンGP0(UART0 TX)、2ピンGP1(UART0 RX)を使っています。

実行結果

キーボード打ち込みを行うと、文字入力が出来ました。やったー!
03_20210329091701

このキーボード、IchigoJam Rでは利用出来なかったのですが、問題なさそうです。

ただし、利用したサンプルプログラムではUSキーボード配列用みたいなので、
日本語キーボード対応の調査が必要ですね。

また、キャプスロック等のキーボード上のLEDの点灯制御が出来ていないようなので、
これについても要調査です。

USBキーボードの利用については、何とかなりそうです。
ついでに、手持ちのワイアレスキーボードを試して見ましたが動きました。

Dscn3026

スタンドアロンで稼働する豊四季タイニーBASICは実装出来そうですね。
次は、フラッシュメモリへのデータ保存について調べてみます。
その後は、自作ライブラリの実装&組み込み方法の調査かな..

2021年3月25日 (木)

Pimoroni Pico VGA Demo Baseを入手しました

Raspberry Pi Pico用のVGA出力ボード「Pimoroni Pico VGA Demo Base」入手しました。

 Pimoroni Pico VGA Demo Base
01_20210325160401

海外からの入手です。送料は800円くらいでした。1週間ほどで到着しました。
amazon(jp)でも、扱っているようですが6,200円と割高ですね。


届いた製品
02_20210325161401
左側のユニバーサル基板は、一緒に注文したものです。

作りはしっかりしています。
03_20210325161401

裏の"海賊ロボ忍者さる"と海賊の顔絵、どこかで見覚えがありますねぇ.. 
04_20210325161401

ボード上にpicoを装着、特に問題なく乗せられました。 
05_20210325161401

スペーサー用のネジ穴径に若干問題あり。手持ちのスペーサーが付けられませんでした。
穴が3mmより小さい(2.8mmくらい?)です。

07_20210325161401

仕方なく、丸棒やすりと3mmドリルで穴を広げることにしました。
08_20210325161401

丸棒やすりでぐりぐりした後、3mmドリルが通るようにしました。
09_20210325161401

無事、スペーサーが装着出来ました。
15_20210325161401

準備OK! 早速サンプルプログラムを動かしてみます。


利用したライブラリ&サンプルプログラム
 ■ raspberrypi/pico-extras
    https://github.com/raspberrypi/pico-extras
    公式ライブラリですが、Pico SDKの追加ライブラリ的位置づけのようです。

 ■ raspberrypi/pico-playground
   https://github.com/raspberrypi/pico-playground
   pico-extrasを使ったサンプルプログラムです。
   ビルドにはpico SDKも必要です。

ビルド

ビルド作業はコマンドプロンプト 「Developer Command Prompt for VS2019」上で行いました。
私の環境(Windows 10)では、"D:\Raspberry Pi Pico"にライブラリやサンプルプログラムを配置しています。

実行コマンド
D:
cd "D:\Raspberry Pi Pico"
git clone -b master https://github.com/raspberrypi/pico-extras
git clone -b master https://github.com/raspberrypi/pico-playground.git
setx PICO_EXTRAS_PATH "D:\Raspberry Pi Pico\pico-extras"
cd pico-playground
mkdir build
cd build
cmake -G "NMake Makefiles" -D"PICO_BOARD=vgaboard" ..
nmake

特につまずくことなく、ビルド出来ました。


サンプルプログラムの実行結果

いくつかのサンプルプログラムを書き込んで実行してみました。

ラズパイのあれが動くデモ、表示は綺麗でちらつき等は全く無いです。
10_20210325190401

ゲームの背景っぽいのがスクロールするサンプルプログラム
11_20210325190401

文字を表示するサンプルプログラム
12_20210325190401

13_20210325190401

思っていた以上に、表示が綺麗できっちりと表示が出来てます。
ゲームなんか実装出来そうですね。
表示系は、色々と出来そうです。後はキーボードやゲームパッドが使えると良いですね。。
調べてみます。

 

2021年3月21日 (日)

Raspberry Pi Picoで4桁7セグLEDをダイナミック表示

Raspberry Pi PicoでのC++/C言語プログラミングの練習の継続..
タイマー割り込みの練習として、4桁7セグLEDの表示をやってみました。

01_20210321080701

動いている様子


以前、bluePill(Arduino環境)でやったプログラムを流用してやってみたのですが、意外とハマってしましました。

回路図

02_20210321083201

GP2
GP13ピンを使って、表示を行っています。
GP6GP137セグLEDの点灯制御用で、1つのLEDあたり、4mAを流すようにR1R8の抵抗を330Ωにしています。
GP2GP5は表示する桁の表示制御用です。LED8個用の電流32mAを流すため、スイッチイング用にトランジスタを使っています。

この回路は、あまり良くないです。
GPIO
ピンをシンク(吸い込み)で駆動させるつもりでしたが、
後から、Raspberry Pi PicoではGPIOオープンドレイン出力(オープンコレクタ)の指定で出来ないことが分かり、
変更も面倒なので、無理やり使っています。
とりあえず、タイマー割り込みの練習が目的のため、良しとします。

流用元のBlullPillでは出力ピンをシンク(吸い込み、オープンドレイン出力指定)にして、LEDの駆動電圧の変更(5V3.3V)に
対応出来るようにしていたのですが(2年前はそのようにやっていたらしい)、
今回、安直に出力ピンの動作を 0V or ハイインピーダンス0V or 3.3V に置き換えたところ、
LEDの駆動電圧をHighと異なる電圧にするとまともに動きません。最初、5Vをかかていたため動かなくてハマりました。

GP6
GP13の出力をLow(0V)にした場合にLEDが点灯、High(3.3V)にした場合(本当はハイインピーダンスにしたかった)、
トランジスタのエミッタの電圧が3.3Vの場合と同じになって電位差無しでLEDが消灯します。
トランジスタのエミッタの電圧が5Vの場合は、3.3V5Vで電位差が生じてしまい、不可解な挙動になりました。
ハイインピーダンスに出来れば、3.3Vでも5Vでも電流が流れないです。

Arduinoのプログラムの移植自体は意外と楽ちんでした。

プログラムソース


タイマー割り込みを行うAPIは、高レベルAPIのpico_timehardware_timerの2種類が用意されているようですが、
今回はpico_timeを使っています。
Arduinoのような感じで、抽象化されていて簡単に使うことが出来ました。
ハードウェア的にはタイマーは1つしかないようですが、多重のタイマー割り込みについても、いずれ検証してみます。



2021年3月15日 (月)

Raspberry Pi Picoのリセットボタンの実装

Raspberry Pi Picoリセットボタンが無いんですよね..
これは、ちょっと不便です。

調べてみるNo.30ピンRUNLOW(0V)にするだけでリセット出来るようです。
ちょうど、No.28ピンがGNDタウトスイッチを乗せることが出来ます。

01_20210315094601

タクトスイッチの片側のピンは切断してブレッドボードに乗せました。
02_20210315094601

実際に試してみると、タクトスイッチを押すだけでリセットが出来ました。
これは良い!

更にプログラムの書き込みも、USBコネクタの抜き差しせずに行えるようになりました。
  ①リセットボタンを押し続ける
  ②BOOTSELボタンを押し続ける
  ③リセットボタンを離す
で出来ます。

USBの抜き差し不要、これはかなり良いです (*´ω`*)

製品として、ボード上に乗せる「Pico Reset Button」というのもあるようです。
PIMORONIの製品、秋月電子さんでも扱っているので、そのうち秋月電子さんで販売するかも..

2021年3月11日 (木)

Raspberry Pi PicoでLチカ

Raspberry Pi PicoでのC/C++プロジェクト作成の練習として、8個の外部接続LEDを制御するプログラムを作ってみました。
その時のメモです。開発環境はWindows 10です。

ブレッドボード上での実装の様子
02_20210310191701

動いている様子


単純な点灯ですが、最初のプロジェクトの作成、最初のGIPOの制御ということで、色々と勉強になりました。

ハードウェア面について

まず回路的には、次のような感じでGP2GP9の8個のピンにLEDを接続しています。
01_20210310192101
LEDに流したい電流を4mAとして、順方向電圧VF2.0V、ボードの駆動電圧を3.3Vとすると
電流制御抵抗値R
   R = (3.3 - 2.0) ÷ 0.004 = 325 (Ω)
となります。近い抵抗として330Ωをチョイスしました。

このあたり(LEDのの電圧降下、電流制御用抵抗値の求め方など)は下記のサイトの解説が参考になると思います。
 参考資料:
  ■ LED関連パーツ 専門店 マイクラフト - LED基本知識&自作工作のHowto集
     - LEDの電圧降下とは?
     - LEDの順電流(IF)とは?
 こういった、まとめ・解説はありがたいですね。

さて、ここで1つ 疑問 が..
「Raspberry Pi Picoは、1ポートあたりどれくらいの電流を流せるのか?」
です。

スペック紹介レベルの資料では、記載がありません。調べるのに意外と時間がかかりました。
なんか面白い(複雑な?)機能あり、簡単な記載ができなかたっぽい?です。

Raspberry Pi Pico
GPIOには"pad"という機能があって、その機能の1つに流せる電流強度の設定が出来るようです。
公開されている資料 RP2040 Datasheetの「2.19 GPIO」「2.19.4.Pads」に次のような記載があります。

Pad electrical behaviour can be adjusted to meet the requirements of the externalcircuitry.
The following adjustments are available:
Output drive strength can be set to 2mA, 4mA, 8mA or 12mA
• Output slew rate can be set to slow or fast
• Input hysteresis (schmitt trigger mode) can be enabled
• A pull-up or pull-down can be enabled, to set the output signal level when the output driver is disabled
• The input buffer can be disabled, to reduce current consumption when the pad is unused,
   unconnected or connected to an analogue signal.

2mA、4mA、8mA、12mAのいずれかの設定が可能で、デフォルト値は4mAのようです。
この設定はUser Bank Pad Control register の PADS_BANK0: GPIO0, GPIO1, …, GPIO28, GPIO29 Registers
DRIVE
ので出来るようです。

   04_20210311102201
とりあえず今回は設定変更はせず、デフォルト値の4mAを上限として利用することにします。
このあたりは後ほど調べていきます。超えて流した場合の挙動等、非常に興味深いです。

いずれにしても、12mAが上限ですかね~ 



ソフトウェア面について


最初のプロジェクト作成ということで、手順等を忘れないよう、自分的メモをのこします。

今回は新規にledというフォルダを作成して管理することにます。
プロジェクトは D:\Raspberry Pi Pico\projects\led に配置します。

また、Raspberry Pi Pico SDKは、D:\Raspberry Pi Pico\pico-sdk に配置し
環境変数PICO_SDK_PATHにこのパスを設定しておきます。
   setx PICO_SDK_PATH "D:\Raspberry Pi Pico\pico-sdk"

プロジェクト内の作成ファイル(led下のファイル)
 ① pico_sdk_import.cmake       pico sdk利用のためのファイル
 ② CMakeLists.txt                  プロジェクトファイル
 ③ led.c                                   プログラム本体

①の pico_sdk_import.cmakeは、pico-sdk\external\pico_sdk_import.cmake をコピーして配置します。
②はドキュメントを参考にして新規作成です。内容は次の通りです。

今回はプログラムソースがled.cのみのためCMakeLists.txtの記述はらくちんです。
いずれ、自作ライブラリのビルド、自作ライブラリのリンク等の記述方法についても学んでいきたいと思います。

Lチカの本体のプログラムは次のような感じです。

始めてSDKのAPIをつかいましたが、他のarm用sdkと比較すると、やれクロック活性化だのと前準備が不要でお手軽です。
Arduinoのような感じで利用出来て、大変良いですね。

プログラム的には、LED_PIN配列で8個のIOポートのマッピング、
update()関数に引数に8ビット(8個のLEDの状態)を指定してLEDのオン・オフの設定を行っています。
今回は1つ1つのLEDの状態を設定していますが、8ビット同時出力が出来るか調べて、やってみたいと思います。

一方で直接レジスタ操作して、低レベルなことも出来るようです。
これについても、ちょっとやってみます。


プログラムのビルド

ビルド作業はコマンドプロンプト 「Developer Command Prompt for VS2019」上で行います。
06_20210311113501

プロジェクトファイル(MAKEFILE)の作成
 mkdir build
 cd build
 cmake -G "NMake Makefiles" ..

これで、nmake用のmakeファイルが作成されます。
ファイル構成の変更がない限りは、1回だで実行です。

ビルド
  nmake led

プログラムファイルの更新の都度、nmakeコマンドでビルドします。
これで、build下に led.uf2が作成されます。
あとは、led.uf2Raspberry Pi Picoに書き込むだけです。


追記 2021/03/13

流せる電流の疑問の件、左端のLEDの抵抗を200Ω、150Ω、100Ωと換えていき、
流れる電流を増やす実験をしてみました。

100Ωを接続すると、LEDが点灯しなくなりました(下記の写真)。

07_20210313175101

100Ωの場合、流れる電流は13mAです。
まだ何とも言えませんが、電流制御の機能が働いていて、出力がストップされた感じです。

padの設定を12mAにしてこの挙動が変わるかと試してみました。
下記が検証用のプログラムです。

実行時の出力(設定されていることの確認)
20210315-093255

同じことをやってみましたが、挙動が一緒で100Ωの場合に、LEDが点灯しなくなりました。
もしかしたら、上記プログラムだと設定できていないのかもしれません。
いずれにしても、大きい電流出力防止的な機能があるようです。
もう少し、調べてみます。

2021/03/15 追記

データシートの「5.2.3.5. Interpreting GPIO output voltage specifications」
GIPOの出力特性に関する記載があり、何となく原因が分かりました。
次のグラフは、GPIOピンの出力電圧、流れる電流、padのdriveの設定の関係を示すものです。
(上がHigh、下はlow時)

20210315-120420

GPIOピンにHigh(LEDを点灯させる場合)を出力した場合、
実際の出力電圧は流れる電流が増えるほど下がるようです。またdiveの設定でその傾きは変更可能..
100Ωの抵抗を接続した場合にLEDが消えてしまったのは、順方向電圧低下が原因だと思われます。
あとで、再実験して電圧・電流を測定して検証してみます。

2021年2月18日 (木)

Raspberry Pi Pico - サンプルプログラムのビルド&実行

Raspberry Pi Picoのサンプルプログラム(C/C++)をWindos 10環境でビルドしてみました。

まずは、Raspberry Pi Picoのピンヘッドをはんだ付けしておきます。
01_20210218102401

細ピンタイプのピンヘッドをはんだ付けしました。
ブレッドボードに乗せるとこんな感じです。
09_20210218102701

ピンアウトのラベルは裏面なので、若干不便ですね~
16_20210218102701

次に環境構築...
作業はPDFドキュメント ①「Getting started with Raspberry Pi Pico」に従って行いました。
Windows環境でのビルド環境の構築については、同ドキュメントの「8.2 Building on Ms Windows」節に記載されています。
12_2021021809120111_20210218091301

まずは「8.2.1. Installing the Toolchain」の内容に従って、コマンドラインでビルド出来る環境を構築します。
手順に従い、下記のツールをインストールします。
 ① ARM GCC compiler
 ② CMake
 ③ Build Tools for Visual Studio 2019
 ④ Python 3.7
 ⑤ Git

③④⑤は既にインストール済のため、省略しました。
一点、問題あります。
「8.2.1.3. Installing Visual Studio Code」の節名は間違っていると思われます。
内容的には「8.2.1.3. Installing the Build Tools for Visual Studio 2019」が正しいとお思います。
ちょっと混乱しました。

次に、「8.2.2. Getting the SDK and examples」に従って、
 ・「Raspberry Pi Pico SDKhttps://github.com/raspberrypi/pico-sdk
 ・「Raspberry Pi Pico SDK Exampleshttps://github.com/raspberrypi/pico-examples
 (上記リンク先ページの内容には目を通すことを推奨します)

をダウンロードして、任意のディレクトリに配置します。
私の環境では「D:\Raspberry Pi Pico\Downloads」に配置しました。04_20210218094001

次に、「8.2.3. Building "Hello World" from the Command Line」の内容に従って、
サンプルプログラムのビルドを行います。

Windowsメニューの「Visual Studio 2019」の下記からコマンドプロンプトを起動します。
05_20210218100201

ここから起動したコマンドプロンプトを使うのはNMAKE等のコマンドにパス等が通ているからです。
通用のコマンドプロンプトの起動では、エラーとなります。
起動したコマンドプロンプト上で作業用のディレクトリ「D:\Raspberry Pi Pico\Downloads」に移動します。

07_20210218101401

ドキュメントに従って、コマンドを実行すると全サンプルプログラムのビルドが出来ました。
08_20210218143401

早速ボードに書き込んでみます。
ここでは、「Hello World」ではなく、「Lチカ(Blink)」を書き込んでみました。
ドキュメントの「3.1. Building "Blink"」を参考にて書き込みを行いました。

まずはRaspberry Pi PicoをWindowsパソコンに接続します。
ボード上の「BOOTSEL」ボタンを押しながら、USB接続すると、
Windows 10からはマスストレージとして認識されます。私の環境ではFドライブとして認識されました。
14_20210218110701

ビルドしたサンプルの中のBlinkの「D:\Raspberry Pi Pico\Downloads\pico-examples\build\blink」内の
blink.uf2をFドライブにドラッグ&ドロップしてプログラムを書き込みます。

17_20210218110901

これで、書き込み終了。プログラム動き出し、Lチカ出来ました (*´ω`*)。

18

う~ん、なんて簡単なんでしょう。
ととりあえず、今日はここまで..

次はVisual Studio Code環境の構築を行います。
CMAKEについては、少々勉強しないといけないですね~



2021年2月12日 (金)

Raspberry Pi Picoを入手しました

Raspberry Pi Picoを入手しました。

 ■ Raspberry Pi Pico (公式サイト)
    製品情報  https://www.raspberrypi.org/products/raspberry-pi-pico/
    資料        https://www.raspberrypi.org/documentation/pico/getting-started/

今回はスイッチサイエンスさんにて購入しましたが、秋月電子さんでも入手で出来ます。

 ■ スイッチサイエンス Raspberry Pi Pico
    https://www.switch-science.com/catalog/6900/
03_20210212102101

届いた製品
01_20210212102101
02_20210212102101

スペック(※スイッチサイエンスさんの商品説明より引用)
・Raspberry Pi(UK)設計のRP2040マイコン搭載
・デュアルコア ARM Cortex M0+プロセッサ、最大動作周波数 133 MHz
・SRAM:264KB、フラッシュメモリ:2MB
・端面スルーホールを備えているため直接キャリアボードへのはんだづけが可能
・USB 1.1 ホスト/デバイス両対応
・低消費電力スリープモードおよびドーマントモードが利用可能
・USBを介しマスストレージを使ったドラッグアンドドロップによるプログラムの書き込みが可能
・26 x 多機能GPIOピン
・2 x SPI、2 x I2C、2 x UART、3 x 12 bit ADC、16 x PWMチャンネル
・正確なクロックとタイマーを搭載
・温度センサ搭載
・高速な浮動小数点ライブラリを搭載
・8 x プログラマブルI/O(PIO)

スペックを見ると、
動作周波数 133MHz、SRAMが264KB、フラッシュメモリが2MB、USB 1.1 ホスト/デバイス両対応
と、この3点だけでかなり使えるボードですね。
他に、QSPI接続にて、外部フラッシュメモリ 16Mバイトも利用可能のようです(読み取りだけみたい)。
DMAもサポートしているようです。

またデータシートをみると、16kバイトのROMが搭載されており、そのROMには次の機能が搭載されているようです。
 • Initial startup routine
 • Flash boot sequence
 • Flash programming routines
 • USB mass storage device with UF2 support
 • Utility libraries such as fast floating point

さらに、面白そうな記述があります。
  2 × Programmable IO (PIO) blocks, 8 state machines total
  ◦ Flexible, user-programmable high-speed IO
  ◦ Can emulate interfaces such as SD Card and VGA

State Machines を使って、VGAなどのちょっとした信号の生成が出来るっぽい
これは、面白そうです。

今年は、この「Raspberry Pi Pico」で色々やっていこうと思います。
まずは、開発環境を構築します。
そのうえで、Arduino等で開発した自作ライブラリを移植していきたいと思います。

2017年12月 4日 (月)

ラズパイ版IchigoJamが公式サイトに掲載されています

IchigoJamのラズパイ版がラスパイ公式サイト ダウンロードに掲載されています。

https://www.raspberrypi.org/downloads/

01

早速、手持ちのラズパイ2で試してみました。
オリジナル版とは異なり、USBキーボードがサポートされています。
画面表示もHDMIに対応していますが、AV端子を使ってNTSCビデオ出力を試してみました。

02

config.txtファイルに sdtv_mode=1 を追加るつことでNTSCビデオ出力出来ます。

今回、ちょとハマったのがSDカードの相性問題です。
下記サイトにラズパイでのSDカードの相性についての記載があります。
https://elinux.org/RPi_SD_cards

手持ちのSanDisk製microSDカードではブートできませんでした。
手持ちのエレコム製microSDカードでは問題無く起動出来ました(写真)。

現時点では、オリジナル版の全ての機能はサポートされていません。
処理速度は、オリジナル版の50倍から100倍(利用するラズパイによる)くらい出ているようです。

移植は完成度は高く、素晴らしいのですが、
オリジナル版のインタープリタ実装方式が今一だった部分がそのまま移植されたため、
ラズパイ本来のパフォーマンス出せていないようで、ちょっと残念です。
(STM32F103C8T6の豊四季Tiny BASICよりも処理は遅いです^^)

このあたりは、改善を望みます。

2017/12/15 追記

現在ラズパイ版IchigoJamは、随時改良・更新が行われています。
描画処理がかなり改善されているようです。

2016年1月19日 (火)

Raspbian Jessie のGPIOまわりの利用権限

Raspbian Jessieで普段使っている アカウント pi の所属グループは、

01

となっていて上記のグループが利用権限を持つディバイスの利用が可能です。

02

もし新たにユーザを登録してそのユーザでGPIOまわりを利用する場合は
そのユーザを各グループに登録すれば利用できるようになります。

ユーザ hoge を グループ dialout に登録するコマンド
$ sudo adduser hoge dialout

他のLinux系だと
$ sudo gpasswd -a hoge dialout

2016年1月 5日 (火)

Raspberry Pi 2でLEDドットマトリックスを制御してみました

以前作成したI2C接続で利用するLEDドットマトリックスをラズパイに繋げて制御してみました。

Dscn4664

I2C接続で制御します。電源は直接ラズパイから供給しています。
4線だけの接続で済みました。

LEDドライバにはHT16K33を利用しています。
HT16K33は、ピン数のことなるバージョンがいくつかあるようですが、
28ピンの8x16の制御ができるバージョンを使っています。





動いている様子


プログラムはC言語で実装しました。GPIOまわりの制御は wiringPiライブラリを利用しました。

// file : matrix.c
// Raspberry Pi 8x16LEDマトリック表示制御 by たま吉さん 2016/1/5
// I2C接続LEDドライバHT16K33を使った8x16のLEDマトリックスを制御する
//

#include <stdio.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>

#define I2CADR 0x70 // I2Cアドレス

// HT16K33コマンド
#define HT_CMD_DATA 	 	0x00	// データ送信 
#define HT_CMD_SYSSET  		0x20	// システムセットアップ
#define HT_CMD_BLINK	  	0x80	// 点滅表示周期の設定
#define HT_CMD_BRIGHTNESS 	0xE0	// 明るさの設定

// HT16K33 レジスタ設定値
#define HT_SYSSET_OSC_ON	1

// HT16K33 点滅表示周期 設定値
#define HT_BLINK_OFF	    	0
#define HT_BLINK_DISPLAY_ON 	1
#define HT_BLINK_2HZ	    	2
#define HT_BLINK_1HZ	    	4
#define HT_BLINK_05HZ   	6

// グローバル変数
int fd;                		 // I2Cファイルデスクプリタ
unsigned short buf[8];  	// 8x16ドットパターン

// サンプルパターンデータ
char msg_saitama[][8] = { 
	 { 0x08, 0x08, 0x7E, 0x04, 0x24, 0x40, 0x3C, 0x00 },    // さ
	 { 0x00, 0x88, 0x84, 0x82, 0x82, 0x50, 0x20, 0x00 },    // い
	 { 0x20, 0xF0, 0x2E, 0x40, 0x48, 0x50, 0x8E, 0x00 },    // た
	 { 0x08, 0x7E, 0x08, 0x7E, 0x08, 0x7C, 0x7A, 0x00 },    // ま
};

// HT16K33 コマンド送信
void ht_cmd(char cmd, char prm) {
	wiringPiI2CWrite(fd, cmd|prm);
}

// 表示パターンの送信
void ht_update() {
	int i;
	for (i = 0 ; i < 8; i++) {
		wiringPiI2CWriteReg8(fd, i*2,  buf[i] & 0xff);
		wiringPiI2CWriteReg8(fd, i*2+1,buf[i] >> 8);
	}
}

// バッファクリア
void ht_clear_buffer() {
	int i;
  	for (i = 0; i < 8; i++) {
    	buf[i] = 0;
  	}
}

// 表示のクリア
void ht_clear() {
	ht_clear_buffer();
	ht_update();
}

// バッファの指定座標のON/OFF
void ht_set_dot(int x, int y, int d) {
	if (d) {
		buf[y] |= 0x8000 >>x;
	} else {
		buf[y] &= ~(0x8000 >>x);
	}
}

// バッファ上の指定座標に8x8パターンをセット(負座標指定可能)
void ht_write_at(char* p, int x, int y) {
	int i;

	if ((x > 15) || (y > 7) || (x < -7) || (y < -7) ) 
		return;

	for (i = 0; i <8; i++) {
		if ((i+y >= 0) && (i+y < 8) ) {
		   if (x <= 8)
		      buf[i+y] |= p[i]<<(8-x);
		   else
		      buf[i+y] |= p[i]>>(x-8);
		}
	}
}

// 1文字左スクロール挿入
void ht_scrollIn(char* p, int wt) {
	int i,j;
	for (j = 0; j < 8; j++) {
		for (i = 0; i < 8; i++) {
			buf[i]<<=1;
		}
		ht_write_at(p, 15-j, 0);
		ht_update();
		delay(wt);
	}
}

// HT16K33 初期化
void ht_init() {
	ht_cmd(HT_CMD_SYSSET, HT_SYSSET_OSC_ON);
	ht_cmd(HT_CMD_BLINK,  HT_BLINK_DISPLAY_ON | HT_BLINK_OFF);
	ht_cmd(HT_CMD_BRIGHTNESS, 0);
}

// メイン
int main(void) {
	int  i,x,y;

	// GPIO利用のための初期化
	wiringPiSetup();
	// HT16K33の初期化
	fd = wiringPiI2CSetup(I2CADR);
	ht_init();
	
	// デモ
	while(1) {
		// デモ1 ドット表示
		for (i =1; i >=0; i-- ) { 
			for ( y=0; y < 8; y++) {
				for ( x=0; x < 16; x++) {
					ht_set_dot(x,y, i);
					ht_update();
					delay(10);
				}
			}
		}
	  	// デモ2 'さいたま' 表示
		for (i = 0; i <4; i++) {
			ht_scrollIn(msg_saitama[i], 100);  
		}
		delay(500);
		ht_clear();
 	}
 	return 0; 
}

コンパイルは、
$ gcc -o matrix matrix.c -lwiringPi
とします。

美咲フォントを使って、コマンド引数に任意も文字列を指定して表示出来るようにしようと思います。