הפעלת רמקול בלוטות' משרת הפקודה עם רספברי פיי

השמעת קול מרספברי פיי דרך בלוטות'? זו ממש לא בעיה.

אני מודה שהפרוטוקול של בלוטות' עבורי הוא סוג של וודו – כלומר זה עובד ואני לא סגור בדיוק איך זה עובד. כשאני רוצה לחבר משהו בבלוטות' אני מחבר, מתפלל לאלוהי התכנות וזה עובד. ואם לא? אני עושה ריסטארט ואז זה עובד.

אבל מגיע השלב בחיים שכן צריך להכנס מעט יותר עמוק לענייני הבלוטות' וזה, כרגיל, קשור לרספברי. לרספברי יש חיבור אודיו רגיל 3.5 מ"מ שאפשר לחבר אליו רמקול מגניב אבל הרבה יותר מגניב לעבוד עם רמקול בלוטות'. במיוחד כשאפשר להשתמש לצורך זה ברמקולי בלוטות' זולים שתמיד מקבלים בכל מיני אירועים ואף פעם אין מה לעשות איתם.

למה אני ארצה לחבר רמקול לרספברי פיי שלי?

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

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

הציוד

ברספברי פיי 4 וב-3 יש כבר בלוטות' מובנה והדרייברים והתוכנות הנדרשות כבר נמצאים ב-raspberry os (גם גרסת ה-64 ביט). אם יש לכם מכונה שאין בה בלוטות' מובנה, תצטרכו להתקין דונגל בלוטות' ולדאוג שהדרייברים יותקנו. זה כמובן כאב אחר לגמרי וחשוב לוודא שהדונגל שקונים מתאים לרספברי פיי או למכונה שלכם.

איך זה עובד?

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

החיבור הראשוני לבלוטות'

הניהול של כל החיבורים לבלוטות' נעשה עם bluetoothctl. מדובר בכלי עזר שיושב מעל ספרית BlueZ שנמצאת בכל מערכת הפעלה לינוקסאית ומאפשרת את הקשר ומכילה את הפרוטוקולים לתקשורת עם בלוטות'. אנו נקליד bluetoothctl בשורת הפקודה ונגיע לקונסולה שלו.

חיבור לקונסולה של bluetoothctl

על מנת לבצע סריקה של כל המכשירים שיש מסביב, אנו נקליד scan on. מייד נקבל רשימה, שתלך ותגדל, של כל מה שמסביב.

רשימה של מכשירי בלוטות' מחוברים

אפשר לראות את השמות שהמכשירים משדרים וגם את ה-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

אם הכל תקין, נראה חיבור:

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

trus 4C:65:A8:5E:CE:95

עכשיו הבלוטות' מחובר. אבל שום דבר לא יעבוד. למה? כי אנו צריכים להורות למערכת ההפעלה להזרים את האודיו דרך הבלוטות' ולא דרך השקע של האודיו.

הגדרת חיבור הבלוטות'

אנו משתמשים בשתי תוכנות פה. הראשונה היא PulseAudio sound server. מדובר בתוכנה שמנהלת קול שנמצאת כברירת מחדל על רוב הפצות הלינוקס ומדצמבר 2020 גם על RaspberryOS. בידקו שהיא אצלכם באמצעות:

pulseaudio --version

התוכנה השניה היא pacmd שמתקשרת איתה באופן נוח גם בזמן ריצה. היא גם נמצאת כברירת מחדל ואיתה אנו עובדים. בידקו שהיא קיימת עם:

pacmd --version

אם הן לא קיימות משום מה, תתקינו אותן (או שפשוט תצרבו מערכת הפעלה חדשה יותר על הרספברי). אם הכל תקין, אז אנו נבחן את ערוצי האודיו הקיימים אצלנו:

pacmd list-sinks | grep -E 'name:|index'

אנו נקבל רשימה מסודרת של ערוצי השמע האפשריים. במקרה הזה – שניים. אחד הדיפולטיבי שזה שקע האודיו 3.5 מ"מ והשני הוא הבלוטות' שיהיה לו שם שנגזר מכתובת ה-mac שלו:

bluez_sink.4C_65_A8_5E_CE_95.a2dp_sink
bluez_sink.4C_65_A8_5E_CE_95.a2dp_sink

השם של ערוץ הקול הוא bluez_sink.4C_65_A8_5E_CE_95.a2dp_sink – אצלכם זה יהיה שם שונה מעט. עכשיו אנו צריכים להגדיר אותו כברירת מחדל. את זה עושים עם הפקודה:

pacmd set-default-sink bluez_sink.4C_65_A8_5E_CE_95.a2dp_sink

וזהו. אנו מוכנים לבדוק את העניין!

השמעת הקול

קבצי 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 – לבחירתכם.

סיכום

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

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

מיקרו בקרים

בית חכם עם ESPHome ו Home Assistant

הסבר על הום אסיסטנט, מערכת הקוד הפתוח לבית חכם ואיך לחבר אליה מיקרובקרים.

ספריות ומודולים

מציאת PII באמצעות למידת מכונה

כך תגנו על משתמשים שלכם שמעלים מידע אישי רגיש כמו תעודות זהות באמצעות שירות אמאזוני.

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