garypippi.net

Gentoo/NeovimでのArduino開発環境とラズパイ用のC言語クロスコンパイル環境を整える

2026/03/27 05:16#pippitank

https://github.com/garypippi/pippitank

学生のころからずっとやりたかった、ラジコン戦車制作がAIのおかげで効率良く進められそうなのでやっていき。
可能な限り自作する針です。

制御はRaspberry Pi Zero WとArduino Uno(ATmega328P)の想定なので、まずはこの2つのコーディング環境から構築します。
ホスト環境はGentoo LinuxとNeovimです。

※ 両環境、clangdが必要。

Arduino開発環境構築

コンパイル等でarduino-cli言語サーバーとしてarduino-language-server導入します。
NeovimでLSP連携するためにも上記2つは両方必須でした。

arduino-cli

https://github.com/arduino/arduino-cli

公式ドキュメントに従ってインストールします。
ここは特に躓きポイント無し。

設定ファイルの生成。

arduino-cli config init

ボードまわりの情報を更新。

arduino-cli core update-index

手元のボードのコアパッケージをインストール。
今回はArduino Unoなのでarduino:avrになります。

arduino-cli core install arduino:avr

arduino-language-server

https://github.com/arduino/arduino-language-server

こちらも公式ドキュメントに従ってインストール。
Neovim側はnvim-lspconfigの情報を参考にします。

https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md#arduino_language_server

arduino-language-serverはsketch.yamlでボードの情報が必要らしいです。
スケッチを配置しているディレクトリに置きます。

ディレクトリ構成例

  • example
    • example.ino
    • sketch.yaml

スケッチの新規作成。

arduino-cli sketch new example

sketch.yamlの作成。

arduino-cli board attach -p /dev/ttyACM0 -b arduino:avr:uno example/example.ino

Neovim側でarduino-language-serverを有効にする。
オプション指定なし、全てデフォルトで問題なしでした。

vim.lsp.enable('arduino_language_server')

スケッチのコンパイルとアップロード

コンパイル。

arduino-cli compile example

アップロード。

arduino-cli upload example

sketch.yamlがあれば、fqbnとportは補完してくれました。

ラズパイ用のC言語開発環境構築

ラズパイ - Arduino連携のプログラムはC言語で書く予定です。
ラズパイにSSH接続してコーディングはしたくないので、普段使いしているGentooデスクトップ上でコーディングして、ラズパイ用にクロスコンパイルします。

クロスコンパイル環境の構築

crossdevを使います。
https://wiki.gentoo.org/wiki/Crossdev

crossdevとeselect-repositoryをインストール。

emerge -a crossdev eselect-repository

crossdevのレポジトリ作成。

eselect repository create crossdev

ラズパイarm用のtoolchainをビルド。
※ gcc等をビルドするので時間がかかる。

crossdev --target arm-linux-gnueabihf

Neovim環境の構築

言語サーバーはclangdを使います。
Neovim側はclangdを有効にするだけでした。

https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md#clangd

vim.lsp.enable('clangd')

レポジトリ直下に.clangd作成

CompileFlags:
  Add:
    - --target=arm-linux-gnueabihf
    - -I/usr/arm-linux-gnueabihf/usr/include

コンパイル

printf("hello\n");だけのやつでお試し。

arm-linux-gnueabihf-gcc hello.c -o hello

helloラズパイに送信して、実行してみたところ、問題なく動きました。

おまけ

楽しい工作シリーズのユニバーサルプレート上で実験するので、ラズパイとArduinoを固定するブラケットをonshapeと3Dプリンタを活用して作成。ユニバーサルプレートは5mm間隔で3mmの穴が空いています。

Arduinoブラケット

ラズパイゼロブラケット