רספברי פיי והאינטרנט של הדברים 1

רספברי פיי והאינטרנט של הדברים

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

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

האינטרנט של הדברים

על פי ויקיפדיה:

“האינטרנט של הדברים (באנגלית: Internet of Things, או בקיצור IoT, הוא רשת של חפצים פיזיים, או “דברים”, המשובצים באלקטרוניקה, תוכנה וחיישנים המאפשרים תקשורת מתקדמת בין החפצים ויכולות איסוף והחלפת מידע. רשת זו צפויה להוביל לאוטומציה בתחומים רבים. האינטרנט של הדברים כולל בין השאר את תחומי “הבית החכם” ו”העיר החכמה”, ויכול להתייחס למגוון רחב של מכשירים. התקנים כאלה מצויים בשימוש כבר היום, ועל פי נתונים של חברת המחקר “גרטנר”, בסוף שנת 2020 מספר ההתקנים המחוברים בעולם יגיע לכ-26 מיליארד.”

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

קבלת נתונים מלוח WIFI

בפוסט הזה ניצור תקשורת פשוטה דו כיוונית בין הרספברי פיי לבין לוח esp8266 שיתקשרו ב WIFI.

ישנה פקודה בלינוקס שנקראת netcat או בקיצור nc. היא נותנת למחשב להקשיב למידע נכנס או לשלוח מידע למחשבים אחרים ברשת המקומית. לדוגמה הפקודה:

nc -l -k 5000

פותחת ברספברי פיי שרת בפורט 5000 ומחכה למידע, l זה קיצור של listen  ו- k קיצור של keep.

 

רספברי פיי netcat

 

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

קודם כל נעביר מסר פשוט לרספברי פיי מלוח esp8266:

#include <ESP8266WiFi.h>

const char* ssid = "your ssid";
 
const char* password = "your password";

 const char* host = "raspberry pi ip address";

void setup() {

   WiFi.begin(ssid,password);

 while (WiFi.status() != WL_CONNECTED) {

   delay(500);

   }

 }

void loop() {

  WiFiClient client;

  Serial.println("wifi connected");

  const int httpPort = 5000;

  if (client.connect(host, httpPort)){

    client.println("hello from esp");

    delay(10000);

    }

 }

raspberry-pi-esp8266-talk

 

כפי שניתן לראות בדוגמה כל 10 שניות עובר מסר “hello from esp”. עכשיו נשכלל את זה קצת ונעביר קלט מכפתור שיודיע לרספברי פיי האם הכפתור נלחץ או לא :

#include <ESP8266WiFi.h>
const char* ssid = "ssid";
const char* password = "pass";
const char* host = "pi ip address";

void setup() {
  Serial.begin(115200);
  delay(10);
  WiFi.begin(ssid,password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println(".....");
   }
 }

void loop() {
  delay(10);
  WiFiClient client;
  Serial.println("wifi connected");
  const int httpPort = 5000;
  if (digitalRead(2) == HIGH){
    if (client.connect(host, httpPort)){
      delay(10);
      client.println("button pressed");
      delay(300);
    }
  }
}

esp8266 חיבור לכפתור

 

אפשר גם להעביר נתונים מחיישנים שונים לרספברי פיי. בדוגמה הבאה הרספברי פיי יקבל נתוני טמפרטורה דרך ה- WIFI וישמור אותם בתוך בקובץ:

nc -l -k 5000 >> data.txt

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

nc -l -k 5000 | ts >> data.txt

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

 

כתיבה לקובץ נתוני חיישנים

תקשורת בכיוון ההפוך

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

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

esp8266 וממסר

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

#include <ESP8266WiFi.h>
const char* ssid = "your-ssid";
const char* password = "your-password";
// Create an instance of the server
WiFiServer server(80);

void setup() {
 Serial.begin(115200);
 delay(10);
 // prepare GPIO2
 pinMode(2, OUTPUT);
 digitalWrite(2, 0);
 // Connect to WiFi network
 Serial.println();
 Serial.println();
 Serial.print("Connecting to ");
 Serial.println(ssid);
 WiFi.begin(ssid, password);
 while (WiFi.status() != WL_CONNECTED) {
   delay(500);
   Serial.print(".");
 }
 
 Serial.println("");
 Serial.println("WiFi connected");
 // Start the server
 server.begin();
 Serial.println("Server started");
 // Print the IP address
 Serial.println(WiFi.localIP());
}

void loop() {
 // Check if a client has connected
 WiFiClient client = server.available();
 if (!client) {
   return;
}
// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
  delay(1);
}
// Read the first line of the request
String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();
// Match the request
if (req.indexOf("1") != -1)
  digitalWrite(2, HIGH);
  else if (req.indexOf("0") != -1)
  digitalWrite(2, LOW);
}

השרת מחכה למידע ומשווה אותו ל- 0 או 1 , אם שולחים את המספר 1 הממסר נדלק ואם שולחים 0 הממסר נכבה. עכשיו כדי להפעיל את הממסר נשלח את הפקודה הבאה:

echo “1” | nc 192.168.1.102 80

כדי לכבות את הממסר:

echo “0” | nc 192.168.1.102 80

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

פקודות מתוזמנות – אוטומציה

בואו נניח שאנחנו רוצים להדליק את הדוד כל יום ב- 7 בבוקר ולכבות אותו ב- 8 איך אפשר לעשות את זה עם הרספברי פיי?

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

crontab -e

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

 

רספברי פיי וממסר תזמון פקודות

 

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

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

 

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *