[עדכון אחרון: 2.10.2024 ונבדק על רספברי פיי 5 ו-4]
אני מודה שהפרוטוקול של בלוטות' עבורי הוא סוג של וודו – כלומר זה עובד ואני לא סגור בדיוק איך זה עובד. כשאני רוצה לחבר משהו בבלוטות' אני מחבר, מתפלל לאלוהי התכנות וזה עובד. ואם לא? אני עושה ריסטארט ואז זה עובד.
אבל מגיע השלב בחיים שכן צריך להכנס מעט יותר עמוק לענייני הבלוטות' וזה, כרגיל, קשור לרספברי. לרספברי יש חיבור אודיו רגיל 3.5 מ"מ שאפשר לחבר אליו רמקול מגניב אבל הרבה יותר מגניב לעבוד עם רמקול בלוטות'. במיוחד כשאפשר להשתמש לצורך זה ברמקולי בלוטות' זולים שתמיד מקבלים בכל מיני אירועים ואף פעם אין מה לעשות איתם.
למה אני ארצה לחבר רמקול לרספברי פיי שלי?
השימושים הם אינסופיים! במיוחד אם אנו מחברים רספברי פיי ל-IoT או החוצה. סירנה שמופעלת ברגע שהאתר לא זמין, מערכת כריזה לילדים, צרחות על כאלו שעוברים ליד הדלת – כל מה שאתם יכולים לדמיין ואפילו יותר!
הבעיה היא שבעוד שממש קל לנו לחבר בלוטות' לממשק גרפי – בשורת הפקודה זה קצת יותר מסובך וגם מעט יותר מסובך להזרים אודיו דרך החיבור הזה. כל מדריך ברשת שבדקתי הכיל לא מעט מידע סותר שלא הביא אותי למטרה או שגרם לי לבכות דם. אז החלטתי לכתוב מדריך מהיר פה כדי שיהיה לי רפרנס לפעם הבאה שארצה לחבר בלוטות' לרספברי או לכל מכשיר אחר שתומך.
הציוד
ברספברי פיי 5,4 וב-3 יש כבר בלוטות' מובנה והדרייברים והתוכנות הנדרשות כבר נמצאים ב-raspberry os (גם גרסת ה-64 ביט). אם יש לכם מכונה שאין בה בלוטות' מובנה, תצטרכו להתקין דונגל בלוטות' ולדאוג שהדרייברים יותקנו. זה כמובן כאב אחר לגמרי וחשוב לוודא שהדונגל שקונים מתאים לרספברי פיי או למכונה שלכם.
איך זה עובד?
יש לנו את ניהול הבלוטות' – כלומר ממש להתחבר ולנהל את החיבור למכשיר, שזו בעיה אחת. אחרי כן יש לנו את העניין של לשלוח פלט אל הבלוטות', שזה כאב ראש שונה לגמרי.
החיבור הראשוני לבלוטות'
הניהול של כל החיבורים לבלוטות' נעשה עם bluetoothctl. מדובר בכלי עזר שיושב מעל ספרית BlueZ שנמצאת בכל מערכת הפעלה לינוקסאית ומאפשרת את הקשר ומכילה את הפרוטוקולים לתקשורת עם בלוטות'. אנו נקליד bluetoothctl בשורת הפקודה ונגיע לקונסולה שלו.
על מנת לבצע סריקה של כל המכשירים שיש מסביב, אנו נקליד scan on. מייד נקבל רשימה, שתלך ותגדל, של כל מה שמסביב.
אפשר לראות את השמות שהמכשירים משדרים וגם את ה-mac address שלהם שזה ממש חשוב. לצד השם. אם השם לא מפיע. לחצו על scan off על מנת לכבות ואז על scan on חזרה ויש סיכוי שתראו את השם. ניתן גם להקליד info ואז את ה-MAC Address כדי להתחבר.
במקרה הזה, אני רוצה להתחבר לרמקול של Mi Portable Speaker, רמקול מאוד יוקרתי ויקר שעולה 30 ש"ח כולל משלוח אם אני זוכר נכון ואחד הילדים קיבל ונשכח בבית כאבן שאין לה הופכין.
ה-mac address שלו הוא: 4C:65:A8:5E:CE:95 ועם זה אני יכול לעבוד.
אחרי שאיתרתי את המכשיר אקליד scan off כדי להפסיק את הסריקה ולא לקבל זבל בלוג.
עכשיו ניגש אל ה-pairing עם הפקודה:
pair 4C:65:A8:5E:CE:95
אם זה נכשל – שימו לב שהמכשיר צריך להיות בפיירינג מוד. בדרך כלל זה לחיצה ארוכה על לחצן עם סימן הבלוטות' במכשיר ואז קול עולז בסינית מודיע על כניסה ל-pairing mode (או משהו בסגנון, אני לא יודע סינית, יכול להיות שהוא סתם מקלל אותי).
אם זה מצליח, עשינו pair ושני המכשירים מכירים אחד את השני, השלב הבא הוא חיבור ונעשה עם הפקודה:
connect 4C:65:A8:5E:CE:95
אם הכל תקין, נראה חיבור:
אם זה לא מצליח, יש סיכוי יותר מסביר שהרמקול הלך לישון. זה הזמן להעיר אותו ולנסות שוב. אבל אם ראיתם שהחיבור הצליח עכשיו רק נצטרך להודיע לרספברי פיי שמדובר במכשיר שאפשר לסמוך עליו. זה כמובן שקר גס, כי זה רמקול שמצאתי במגירת הזבל של הילדים ואני לא סומך עליו, אבל לרספברי לא אכפת כל עוד אני מקליד את הפקודה:
trust 4C:65:A8:5E:CE:95
עכשיו הבלוטות' מחובר. אבל שום דבר לא יעבוד. למה? כי אנו צריכים להורות למערכת ההפעלה להזרים את האודיו דרך הבלוטות' ולא דרך השקע של האודיו.
הגדרת חיבור הבלוטות'
אנו משתמשים בשתי תוכנות פה. הראשונה היא PulseAudio sound server. מדובר בתוכנה שמנהלת קול שנמצאת כברירת מחדל על רוב הפצות הלינוקס ומדצמבר 2020 גם על RaspberryOS. בידקו שהיא אצלכם באמצעות:
pulseaudio --version
התוכנה השניה היא pactl שמתקשרת איתה באופן נוח גם בזמן ריצה. היא גם נמצאת כברירת מחדל ואיתה אנו עובדים. בידקו שהיא קיימת עם:
pactl --version
אם הן לא קיימות משום מה, תתקינו אותן עם sudo apt-get install pulseaudio pulseaudio-module-bluetooth. הן באות כברירת מחדל במערכת ההפעלה המלאה של רספברי פיי אבל במערכות קלות יותר/אחרות, נצטרך התקנה ידנית.
אם הכל תקין, אז אנו נבחן את ערוצי האודיו הקיימים אצלנו:
pactl list short sinks
אם זה לא עובד, סימן שה-deamon, כלומר התוכנה האוטומטית שמריצה את pulse audio שמפעילה ערוצי האודיו, לא עובדת. איך גורמים לה לעבוד? נריץ:
pulseaudio –start
וכדי לגרום לה לעבוד גם לאחר ריסטרט:
mkdir -p ~/.config/systemd/user
cp /usr/lib/systemd/user/pulseaudio.service ~/.config/systemd/user/
systemctl --user enable pulseaudio
ואז נוכל להקליד pactl list short sinks ויצא משהו
אנו נקבל רשימה מסודרת של ערוצי השמע האפשריים. במקרה של רספברי פיי 4 – שניים. אחד הדיפולטיבי שזה שקע האודיו 3.5 מ"מ והשני הוא הבלוטות' שיהיה לו שם שנגזר מכתובת ה-mac שלו. ברספברי פיי 5 רק אחד כי אין שקע אודיו.
השם של ערוץ הקול הוא bluez_output.4C_65_A8_5E_CE_95.1 – אצלכם זה יהיה שם שונה מעט. עכשיו אנו צריכים להגדיר אותו כברירת מחדל. את זה עושים עם הפקודה:
pactl set-default-sink bluez_output.4C_65_A8_5E_CE_95.1
וזהו. אנו מוכנים לבדוק את העניין!
השמעת הקול
קבצי mp3 הם בעייתיים פה אז הייתי הולך דווקא על פורמט wav. הורידו קובץ wav באמצעות wget מאתר כלשהו. למשל https://freewavesamples.com
wget https://freewavesamples.com/files/Police-Siren.wav
הכנסו למיקום של הקובץ ופשוט נגנו אותו עם aplay באמצעות הפקודה:
aplay Police-Siren.wav
אם הכל תקין, תוכלו לשמוע צליל ענוג של סירנת משטרה. אם לא עובד – תבדקו את הווליום על המכשיר.
ניתן לשנות את עוצמת הקול (במקרה שלי, זוגתי יעל קצת פחות התלהבה מקולות סירנה בתוך הבית בווליום משוגע) באמצעות:
amixer set Master 25%
או עם set-sink-volume –
pactl set-sink-volume bluez_output.4C_65_A8_5E_CE_95.1 100%
לבחירתכם.
סיכום
לסיכום, עבודה עם בלוטות' יכולה להיות קצת מלחיצה – אבל זו אחלה דרך לנצל חומרה זולה שיש לרובנו בבית לצרכי שעשועים עם ה-IoT או עם הרספברי, הרמקולים האלו בדרך כלל לא הכי איכותיים, אבל בהחלט יכולים למלא את התפקיד של כלי עזר לרספברי ולפרויקטים מוזרים.
2 תגובות
small typo
trust not trus
ומה קורה כשמתחברים שוב לרמקול אחרי שכובה והודלק נניח? כל התהליך מחדש?