הרצת גו על רספברי פיי

עולם הרספברי פיי והמייקרים ניתן לתפעול בכל שפה - לא רק פייתון או C - כאן אני מסביר על גו

פוסט זה נוצר כהקדמה להרצאתי בכנס גופרקון 2024 שבה אני מספר על IoT ואיך עובדים איתו בגו.

למי שלא מכיר – רספברי פיי הוא מחשב לוח קטן וזול יחסית שאפשר להתקין ולחבר בקלות. אפשר ממש לחבר אליו מסך ומקלדת ולעבוד עליו כמו מחשב רגיל או להתחבר אליו ב-SSH.

מערכת ההפעלה של רספברי פיי היא לינוקס לכל דבר וקל להריץ עליה גם פייתון וגם Node.js. אבל אפשר להריץ עליה כל שפה, באמת כל שפה. המון מתכנתים נמנעים מ-IoT כי הם בטוחים שאפשר לכתוב רק ב-C או במקרה הטוב רק ב-++C. בפועל אפשר לכתוב בכל שפה שהיא ובמקרה הזה גו. מה שכן, על מנת לכתוב IoT צריכים להכיר את periph.io שהיא ספרית גו מוצלחת לתקשורת עם הפריפריה של רספברי פיי וספציפית עם GPIO.

המצרכים שצריך הוא רספברי פיי עם מערכת הפעלה מבוססת לינוקס שמותקנת עליו וכן חיבור SSH. אפשר לקרוא את המאמר ההתחלתי הזה על רספברי פיי ואת הפוסט הזה על חיבור ל-SSH כדי לדעת איך להגיע לרגע המאושר הזה.

רספברי פיי – הדרכה התחלתית

רספברי פיי – SSH

חיבור התחלתי והתקנת Go

אחרי שהתחברתם עם SSH, הגיע הזמן להתקין את Go. אני מראה פה על 1.23.0 שזו הגרסה החדשה, אבל אפשר לבחור איזו גרסה שאתם רוצים מדף ההורדות.

ההתקנה היא מאד דומה ללינוקס – נוריד ונפתח את הקובץ המתאים עם שתי שורות:

wget https://golang.org/dl/go1.23.0.linux-armv6l.tar.gz

sudo tar -C /usr/local -xzf go1.23.0.linux-armv6l.tar.gz

זה מתקין את Go על /usr/local/go/. השלב הבא הוא להכניס את השורות המתאימות ל-PATH כדי שנוכל להקליד go בטרמינל וגם יקרה משהו. ברספברי פיי אנו נעשה זאת עם שינוי בקובץ ה-profile. נכנס לעורך הטקסט nano:

nano ~/.profile

ונוסיף את שלושת השורות האלו:

export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

נטען מחדש את הטרמינל עם:

source ~/.profile

ונבדוק שהכל עובד עם:

go version

אם מקבלים גרסה אז הכל תקין. זה די פשוט לבצע את ההתקנה אם אתם שולטים ב-SSH, בפקודות לינוקס ובקונספט של לינוקס. אם לא ממש, אז דווקא העיסוק ברספברי פיי וב-IoT מאד מחזק את הידע הזה שנדרש גם לעבודה בחיים האמיתיים.

כתיבת קוד גו של Hello World על הרספברי פיי

על מנת לראות שהכל באמת עובד, נכתוב איזה Hello World קטן. ניצור תיקית פרויקט ונכתוב לתוכה.

mkdir -p ~/go/src/hello
nano ~/go/src/hello/hello.go

ונכניס לתוך הקובץ קוד די פשוט:

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

נשמור ונסגור ואז נכנס לתיקיה נריץ את הפקודה שמקמפלת ומריצה:

cd ~/go/src/hello
go run hello.go

זה יקח טיפה יותר זמן מהרגיל כי למרות שרספברי פיי היא מכונה חזקה, בכל זאת היא לא מתחרה עם מכונת הפיתוח שלכם.

טוב, זה אחלה, אבל לא באנו לפה כדי לכתוב Hello World. בואו נתחבר קצת ל-GPIO!

מה זה GPIO

אם תבחנו את הרספברי פיי שלכם, תראו שיש פינים שמחוברים אליו.

הפינים האלו נקראים GPIO – General Purpose Input Output – אנחנו יכולים להעביר דרכם זרם. כך למשל אני יכול לחבר נורת LED ל-GPIO מצד אחד ולגראונד מהצד השני וליצור מעגל חשמלי. באמצעות תוכנה אני יכול להורות ל-GPIO להעביר מתח ולהדליק את ה-LED או לא להעביר LED ולכבותו.

יש במאמר הזה שכתבתי הסבר מקיף על GPIO עם דוגמאות שאפשר לכתוב בשורות הפקודה (לא שפת תכנות אלא ממש דרך הטרמינל) שמסביר את העניין די טוב. אבל גם לא חייבים להסתבך עם אלקטרוניקה בשביל דוגמה פשוטה – יש לרספברי פיי נורית LED שמחוברת ללוח ואפשר לנסות ולשלוט בה רק כדי להתנסות בדוגמאות Hello World ולראות איך הכל מנגן. הנורית הזו היא GPIO 42. הבה ונבדוק אותה.

חיבור ל-GPIO עם גו

הספריה המוצלחת ביותר לעבוד עם GPIO היא periph.io. יש לה אתר משלה ודוקומנטציה מוצלחת. ואפילו דוגמת Hello World מוצלחת גם.

בגדול – ניצור בתיקיה מודול עם הפקודה:

go mod init hello

נתקין את periph.io

go get periph.io/x/cmd/...

עכשיו יהיה אפשר להשתמש בספריה הזו. אנו נראה שימוש ב-LED הפנימי. נכניס את main.go באמצעות nano:

nano main.go

ואז נכתוב:

package main

import (
    "time"
    "periph.io/x/conn/v3/gpio"
    "periph.io/x/conn/v3/gpio/gpioreg"
    "periph.io/x/host/v3"
)

func main() {
    host.Init()
    p := gpioreg.ByName("42")
    t := time.NewTicker(500 * time.Millisecond)
    for l := gpio.Low; ; l = !l {
        p.Out(l)
        <-t.C
    }
}

נריץ את הפקודה:

go run main.go

ונוכל לראות את ה-LED הפנימי מהבהב! הצלחה!

שימו לב שאני מפעיל את GPIO 42 שהוא ה-LED הפנימי ברספברי פיי 4, שזה הדגם שבדקתי איתו. בדגמים אחרים המספר יכול להיות שונה.

זו די דוגמת Hello World, אבל מהרגע שאתם מכינים את הסביבה וסוגרים את המעגל, החגיגה מתחילה. עכשיו אפשר להפעיל את ה-GPIO ולקבל קלט ופלט והכל בשפה שאתם מכירים ומבינים. אם אתם אנשי גו – לא חייבים להשתמש בפייתון, ב-C או בכל שפה אחרת. עולם ה-IoT והמייקרים פתוח בפני כל שפה שהיא.

פוסטים נוספים שכדאי לקרוא

DALL·E 2023-10-21 22.28.58 - Photo of a computer server room with red warning lights flashing, indicating a potential cyber threat. Multiple screens display graphs showing a sudde
יסודות בתכנות

מבוא לאבטחת מידע: IDOR

הסבר על התקפה אהובה ומוצלחת שבאמצעותה שואבים מידע מאתרים

גלילה לראש העמוד