Raspberry Piにはどのプログラミング言語を使うべき?
Raspberry Piを初めて使う方は、学習するプログラミング言語の選択に岐路に立たされるかもしれません。
世の中には非常に多くの言語があり、何を学ぶかによってできることが大きく変わってきます。そこで、Raspberry Piで使える言語を見てみましょう。
Raspberry Piにプリインストールされている言語
Raspberry Piから得られる最大のヒントは、Raspberry Pi OSにあらかじめ搭載されている言語かもしれません。
すべてのインストールにおいて、Python、Scratch、CまたはC++がプリインストールされています。
では、まずこの3つの言語について見てみましょう。
Python: Raspberry Piのための優れた汎用言語
長所
- 習得しやすい
- コンポーネント用のライブラリが多数
- 多くの素晴らしいチュートリアルがあります。
- マイコン「Raspberry Pi」、「Pico」シリーズで使用可能
短所
- Webサイト開発(特にフロントエンド)には不向き
- CやC++より遅い
ゼロから始めるのであれば、Pythonが最も手っ取り早く、効率的な方法でしょう。
ひとつは、Pythonは簡単に手に入る言語のひとつであること。
もう一つの理由は、様々なセンサーやコンポーネントのためにPythonで書かれたライブラリが多く存在することです。 その結果、チュートリアルやプロジェクト用のスクリプトのかなりの部分がPythonで書かれることになります。
もし、他の言語、例えばJavaScript(NodeJS経由)を使うとしたら、一般的なセンサー用のライブラリがなくて困ってしまうかもしれません。
最後に、Pythonを学ぶことで、Raspberry Piのラインナップのすべてのボードと対話することができます。Raspberry Pi 4だけでなく、Raspberry Pi Pico用のプロジェクトも作成することができます。
Raspberry Piのメーカーは、Pythonでプロジェクトを構築することも容易にしています。例えば、すべてのRaspberry Piマイコン(Pi 4など)にはPython IDEであるThonnyが付属しており、すべてのRaspberry Pi PicosはデフォルトでMicroPythonを読み込むことができます。
ThonnyはRaspberry PiでPythonを簡単に使えるようにします。
Raspberry Pi OSにはThonnyもプリロードされており、Pythonスクリプトの実行がとても簡単にできるようになっています。
Thonnyは、IDEの「RUN」「STOP」ボタンを押すことで簡単にスクリプトを開始・停止できるので、Pythonでのプログラミングが容易になります。
一方、他のエディタを使用する場合は、スクリプトを実行するために、おそらくターミナルに入力する必要があります。
Raspberry Pi PicoのためのMicroPython
特にRaspberry Pi Picoを使いたい場合は、Pythonを習得しておくと便利です。
マイコンのRaspberry Piとは異なり、Raspberry Pi Picoはデフォルトで3つの言語しか使えません。CまたはC++とMicroPythonです。
つまり、Pythonを習得していれば、構文が同じなので、MicroPythonの記述に移行することができるのです。
PythonとMicroPythonの主な違いは、後者の方が標準ライブラリが小さいことです。
CircuitPython
MicroPythonの他に、CircuitPythonもRaspberry Pi Picoで使用されているPythonの派生版です。CircuitPythonはAdafruit社によって作成されています。
PythonはRaspberry Piユーザーにとって良い言語なのでしょうか?
はい。もちろんです。
Raspberry Pi用のプロジェクトを作るなら、Pythonの知識は絶対に必要です。
私はプログラミングの旅をJavaScriptから始めました。Raspberry Piの領域以外では、JavaScriptはプログラムやウェブサイトを作ることができるので、とても効率的な言語です。
ところがある日、7セグメントディスプレイのプログラムを作らなければならなくなり、JavaScriptではどうにもならなくなりました。
ネットでスクリプトを見つけたのですが、Pythonで書かれていて、それがきっかけでPythonを学ぶ道に進みました。
Raspberry Piプロジェクトを最も効率的に、素早く、簡単に作りたいなら、Pythonの学習がおすすめです。
Raspberry PiプログラミングのためのPythonを学べる場所
ラーニングパス - これらのリソースは、Pythonの特定の部分を学習することができるリンクをまとめています。これらは一般的な学習経路であり、Raspberry Piに特化したものではありません。
ハーバード・オープンコース・ウェア CS50の「Pythonによるプログラミング入門
YouTube ビデオ
Corey SchaferのPython初心者向けチュートリアルプレイリスト
Raspberry Piに特化したコース - 初心者のためのコースです。
ラズベリー・パイ・ファウンデーション - このコースでは、Pythonでのプログラミングの一般的な概要を学び、ゲームプログラミングやセンサーやコンポーネントとのインタラクションに踏み込んでいきます。
リアルPython, Raspberry PiでPythonを使った物理プロジェクトを作る - これは、センサーとコンポーネントのキットを持っていて、GPIOと相互作用するコードに飛び込みたい人のための素晴らしいガイドです。一般的なPythonチュートリアルとは異なり、簡単なセンサーの配線方法とRaspberry Pi 4でセンサーと対話する方法を教えてくれるでしょう。
Scratch for Raspberry Pi
友人の一人がRaspberry Pi 4で作ったLED信号機を見せてくれました。
彼はJavaやJavaScriptでのプログラミングに精通したシニアデベロッパーなので、何かのプログラミング言語で書いているのだろうと期待していたのです。
でも、ダメなんです...。
Scratchを使っていた。
何?
なぜ、ソフトウェアの先輩がScratchを使ったのか?
Scratchは、"世界最大の子供向けコーディングコミュニティであり、若者がデジタルストーリー、ゲーム、アニメーションを作成できるシンプルなビジュアルインターフェースを持つコーディング言語 "と説明されています。
私の友人は、間違いなく子供ではありませんでした。
その理由を尋ねると、彼はGitのコミットメッセージと同じくらい有用な答え、「well its simple to program」をくれました。
ちなみに、英国ケンブリッジにあるRaspberry Pi Storeを訪れた際も、Scratchが動作するPiが置いてありました。
だから、きっと何かいいことがあるに違いない!
ScratchはRaspberry Piユーザーにとって良いプログラミング言語なのでしょうか?
プログラミングの表面を掻くには良いのでしょうけど。
Scratchの大前提は、子供たちや十代の若者たちが簡単にプログラミングができるようにすることです。Scratchでは、抽象的なコードを書くのではなく、ブロックを組み合わせることでプログラムを作成することができます。
ScratchでLEDを点滅させるためには、これらのブロックを組み立てることになります。
さて、これをLEDを点滅させるPythonスクリプトと比較してみましょう。
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BOARD)
GPIO.setup(8, GPIO.OUT, initial=GPIO.LOW)
while True:
GPIO.output(8, GPIO.HIGH)
sleep(1)
GPIO.output(8, GPIO.LOW)
sleep(1)
おそらく、コマンドラインではなくGUIを使うことを好む人がいるのと同じ理由でしょう。変数の値を変更するのに、バックスペースや矢印キーなどのキーを何度も押す代わりに、クリックやピックだけで済んでしまうのです。
シンプルなプロジェクト、学習、教育には、Scratchが最適です。
Scratch for Raspberry Piのデメリット
前項のダジャレを聞き逃した方は、ここでもう一度。スクラッチは表面を傷つけるだけです。
必然的に、プロジェクトが大きくなれば、PythonやC、C++といった主流の言語を使いたくなるでしょう。なぜなら、オンラインで利用できる豊富なコード、ライブラリ、スクリプトにアクセスできるからです。
Scratchを学ぶ
Scratchの仕組みに興味がある方は、その「積み木」方式がどのようなものかをすぐに感じ取ることができます を、そのオンライン環境上で実現しました。
- Raspberry Piには、Scratchのコースがいくつかあります。ハードウェアの構築を含む
- Aaron MaurerがYouTubeでチュートリアルを公開しています。 を使って、Scratch 3を使って、LEDを点滅させる方法を紹介します。
Raspberry PiのためのCまたはC++。
究極のコントロールが可能なプログラミング言語は、学習と習得が最も難しい言語のひとつでもあります。
C言語とC++の違いは何ですか?
C++はある意味C言語の拡張版で、ネイティブ設計されたオブジェクト指向プログラミングのサポートなど、多くの機能を含んでいます。この「++」は、CやC++で演算子をインクリメントする方法にちなんだダジャレです。例えば、変数catsを持っていて、それに1を加えたい場合は、単にcats++と書けばいいのです。
特にC++は非常にダイナミックで、常にアップデートが行われます。学ぶには複雑な言語です。初心者はC言語を選択する方が適切かもしれません。
Piに使われている他の言語との大きな違いは何ですか?
これらの言語はコンパイルされます。つまり、コードを書いてからコンパイラと呼ばれる特別なアプリケーションを使って、ターゲットアーキテクチャのプロセッサがネイティブに理解できるマシンバイト・コードを生成します。つまり、あるアプリケーションをPico WとRaspberry Pi、そしてデスクトップパソコン(x86ベース)の両方で動作させたい場合は、それぞれ専用のコンパイラを実行する必要があるのです。
コンパイル言語のもうひとつの例としてRustがありますが、これには大きな利点があります。CやC++では、ガベージコレクションのような特定の処理を行う必要がありますが、これを行わないと、アプリケーションがクラッシュする可能性があります。そうしないと、アプリケーションがクラッシュするかもしれませんし、デバイスドライバを書けばコンピュータ全体がクラッシュするかもしれません。Rustには、開発者のためのセーフガード(安全装置)が用意されています。
また、Googleが開発した人気のコンパイル言語にはGoというものがあります。時折、それらへの言及に気づくかもしれません。
プログラミングをしたことがない人にお勧めなのは、インタープリタ型言語です。コンパイルする必要がなく、アプリケーションに読み込まれ、正しいコマンドが実行されます。Python(またはMicroPython)は、初心者にお勧めの言語です。
ただし、万が一、作成する場合は Raspberry Pi PicoでDoomをプレイするような衝撃的なプロジェクト。 となると、C言語かC++の知識が必要になります。
CまたはC++は、一般的にRaspberry Piで最も広く使用されている3つの言語のうちの1つで、もう1つはPythonです。したがって、このセクションのかなりの部分は、この2つの利点と欠点について話します。
まずは、この3つを比較してみましょう。
シーアンドシー | MicroPython | |
スピード | より速く | 低速 |
ラーニングカーブ | よりハードに | より簡単に |
メモリ管理 | マニュアル | 自動(ガベージコレクション) |
コンパイル?インタープリタ? | 編集 | 通訳付き |
地域ごとの利用状況 | 特に微細な制御が必要な高度なプロジェクトで使用されるなど、幅広い用途で使用されています。 | 初心者から上級者まで幅広く利用されています。 |
コンポーネント用ライブラリ | 一般的に利用可能 | 一般的に利用可能 |
初心者はCとC++のどちらを学ぶべきですか?
試行錯誤は止められない。
死なないからこそ、強くなれるのだから。
ほとんどのプロジェクトは、CやC++だけでなく、Pythonでも実現可能です。3つの言語のライブラリの有無も普及しており、ライブラリがないことがボトルネックになることはまずないでしょう。
あなたはどれくらい粘り強いですか?
CやC++は、Pythonでは考えなければならないことがたくさんあるので、初心者のプログラマーにとっては少し楽しくないかもしれません。
例えば、CやC++では、メモリを管理する必要があります。また、変数にどのようなデータ型を代入するかを考える必要があります。型を選ぶことの長所と短所の意味合いを理解していないと、面倒なことになります。
例えば、CやC++で整数を代入する場合、必要かどうか判断する必要があります。
- イント
- 焦がす
- ふごうなしじゅんびしょう
- 符号付き文字
- 符号なし整数
- 素っ気ない
- 符号なしショート
- 長
- 無記号長
これらの選択は、プログラムの速度とメモリ使用量に影響を及ぼします。
また、Pythonの方が効率は悪いですが、整数を宣言するために必要なのはこれだけです。
integer = 999999999999999
でも、ノーペイン・ノーゲインでしょ?
CやC++の動作に慣れれば、その恩恵を受けられるようになります。Raspberry Piは現在の基準ではそれほど強力なコンピュータではないので、効率的なコードを書けるようになれば、その限られたハードウェアから最高のパフォーマンスを引き出すことができるようになるのです。
CとC++のセットアップに時間がかかる
Raspberry Pi Picoボードが登場したとき、PythonとCとC++のためのPicoのセットアップについて書かなければなりませんでした。
Pythonは超簡単でした。Thonnyをダウンロード。Picoをプラグイン。MicroPythonをフラッシュする。完了。
CやC++はもっと大変で面倒だった。それは明らかです -。 Raspberry Pi、C/C++のセットアップの話題だけをまとめたPDFを公開.設定するためには、コマンドラインとのやりとりが必要だったということにしておきましょう。
You'll always C the light
Cは約40年前のもので、現在も使われています。
それはどういったことなのでしょうか?
ソフトウェアを作ったり、ハードウェアを操作したりするのに使える、最もダイナミックな言語の一つです。
ですから、もしあなたが非常に便利で強力な言語を学びたいと考えているのなら、C言語は最初に学ぶ言語として最適かもしれません。
Psst... CとC++は他のボードでも使用可能です
Raspberry Piの在庫が大問題になっている2022年に、これを書いているのです。
人々が最も求めていることの1つは、「どんな代替ボードがあるのか?存在しないRaspberry Piでプロジェクトを組むことはできない" です。
代替基板はたくさんありますし は、こちらからご覧いただけます。
CやC++を学んだ人なら、ArduinoやESP32、ESP8266のようなCやC++で書かれたボードをすぐに使いこなすことができるはずです。
Raspberry Piでマイコンを使ってプロジェクトを作るのが目的なら、CやC++の方が使いやすいかもしれません。
Raspberry PiのためのCまたはC++の学習
MagPiでは、C言語を学べる場所のリストも公開しています(Raspberry Piに特化したものではありません)。
Raspberry PiがRaspberry Pi PicoでC/C++を使う方法を紹介したPDFを公開
竜はここにあり
上記の項では、習得を検討すべきプログラミング言語についてお話しました。
次のセクションでは、Raspberry Piで使用できる可能性のある言語について説明しますが、Python、C、C++、Scratchを使用する場合ほど、使用例やコミュニティは大きくありません。
JavaScript(NodeJSを含む)
JavaScriptは、アプリやウェブサイト(HTMLとCSSで)、バックエンドを作成できるため、趣味のプログラマーにとって最も便利な言語のひとつだ。
JavaScriptの分野での大きな進歩のひとつに、NodeJSというものがあります。これまでのJavaScriptはブラウザベースが主流でしたが、NodeJSを使えば、バックエンドを動かし、Raspberry Piなどのコンピュータにアプリを作ることができます。
特にRaspberry Piに対しては、Raspberry PiのGPIOピンを操作するためのライブラリが存在します。そのため、簡単なプロジェクトを組むのであれば、JavaScriptのプログラムを実行しても問題はないでしょう。
しかし、あなたのプロジェクトの最大のボトルネックは、Raspberry PiとJavaScriptが交差するコミュニティがないことです。
これは、誰かのGithubを訪れると明らかになり、必然的に彼らのプロジェクトはPythonやC, C++で書かれています。Raspberry PiでJavaScriptを使っているプログラマはほとんどいません。
では、JavaScriptは評価減になるのか?
いや、そうでもないんです。
今でも使い道はある。
JavaScriptを学ぶだけで目的を達成できるユースケースとして、Raspberry PiをWebサーバーとして使いたい場合があります。バックエンドをExpressJS(バックエンドフレームワーク)、フロントエンドをReact/Angular/Vue(フロントエンドフレームワーク)で書き、PM2(プロセスマネージャ)を使ってバックエンドとフロントエンドを配信するとします。このシナリオでは、完全にJavaScriptで行うことができます。
Raspberry Pi Pico WはJavaScriptが必要です。
少し前のReactミートアップで、ある人が私をバニラJavaScriptを書いているとからかった。彼は「今は何年だ」とからかった。2000年代か?" とからかわれました。
Raspberry Pi Pico Wをお持ちの方は、いずれ書き方を知る必要があります。 バニラJavaScript.
今、笑っているのは誰だ?
Web開発の世界ではReactやAngular、Vueなどのフロントエンドフレームワークを使う方向に進んでいますが、Raspberry Pi PicoでWebサイトを提供するには、一般的にバニラJavaScriptの書き方を知っている必要があります。私たちのチュートリアルを見てみると ピコWメガ記事、ご覧の通りです。
Pico W の最大の利点の 1 つは、Web ページを提供できることです。Web ページはおそらく何かを制御するために使用します。例えば、サーボを制御するスライダを表示した Web ページを Pico W で表示させることができます。スライダーの値を Pico W に伝えるには、JavaScript の知識が必要になります。
JavaScriptを学ぶ
私がJavaScriptを学ぶ上で最高のリソースであることを証明した、たった一つのウェブページを推薦することができます。
この教材は、バニラJavaScriptのあらゆる側面と、ブラウザのイベントを教えてくれるので、Pico Wのユーザにとって非常に良い教材です。Pico Wを効果的に制御し、提供するWebページのUXを向上させるためには、後者の知識が必要になります。
HTML + CSS
HTMLとCSSはプログラミング言語ではないが、JavaScriptのセクションと密接な関係がある。以下のような場合に役立ちます:
- ウェブベースで何かをする予定がある方
- Pico Wを使用してWebページを提供する予定です。
この1つのサイトにとても助けられています。 インターネットは難しい
少し古いです。例えば、CSS Gridやアスペクト比はカバーされていません。
しかし、Interneting is Hardには効果的な教え方があり、Pico WのWebページを構築するのに十分な量を教えることができます。
こんな方におすすめ
結果を早く出す:PythonまたはScratch
子供たちにプログラミングを教える。 スクラッチ
ハードウェアを究極にコントロールする。 C または C++
ハードウェアプロジェクトの構築:PythonかCかC++で、それ以外は気にしなくていい
WebサーバーのホスティングとWebサイトの構築:HTML、CSS、JavaScript
Pico WでIoTプロジェクトを構築する。 Python、HTML、CSS、JavaScript
神のような存在になる(桁外れの時間投資で):C言語または(特に)C++言語
C/C++」を1つの言語として紹介するのはやめてください。それは初心者を混乱させるだけです。これらは2つの全く異なる言語であり、異なる学習曲線と異なる能力を持っています。
ご感想ありがとうございます。記事を修正し、言語の違いについて少し詳しく説明しました。
この2つはまったく異なる言語だ」という意見には同意できない。CはC++のサブセットだ。もちろん、C++はCよりも学ぶのが難しい。
この記事への謝辞