אז יש לנו בקר, ונניח שהוא מחובר לחיישן טמפרטורה, ואוסף דגימה פעם בחצי שעה, מחובר לספק כוח. ואז… הפסקת חשמל. כשנחבר אותו חזרה, הבקר יחזור לעבוד, אבל כל המידע שנוצר יילך לאיבוד… במדריך זה נדון באפשרות של שימוש בזיכרון הEEPROM על מנת לשמור נתונים חשובים.
אז מה אפשר לעשות במקרה כזה?
- אפשרות א’: להשאיר את הבקר מחובר למחשב ולהשתמש בפורט הסיריאלי כדי לקרוא את המידע ולהעביר אותו לקובץ
- אפשרות ב’: במקרה של מיקרובקר שיודע להתחבר לאינטרנט, לשלוח את המידע למסד נתונים מרוחק
- אפשרות ג’: לשמור את המידע על הבקר עצמו ב”זיכרון הקשיח” שלו – הEEPROM
ספציפית במדריך זה, נדון ביישום של אפשרות ג’.
מהו EEPROM?
ROM הוא סוג של זיכרון שבו משתמשים בקרים ומחשבים. Read Only Memory – מה שרלוונטי לנו הוא שיש לנו סוגים של ROM שניתנים לכתיבה. EEPROM הוא אחד מהם.
למשל, תוכנת הBIOS, התוכנה שקיימת בכל מחשב ומריצה את הפרוצדורות הראשונות, לפני מערכת ההפעלה כתובה על סוג כזה של זיכרון
EEPROM בבקר שלנו – ESP8266 nodeMCU
מי שעוקב אחרי הפרוייקטים בבקרה שאני מתעד כאן באתר יכול לשים לב שאני מאוד אוהב את הNodeMCU. למה? שלוש הסיבות העיקריות הוא בסדר חשיבות עולה: הוא קטן פיזית, יחסית לארדואינו אונו ARDUINO UNO הפופולארי; הוא זול; ויש לו רכיב וויפיי מובנה, שזה קריטי באופן מוחלט לכל פרוייקט IoT שנרצה לבצע.
אז לעבודה
הקוד למחיקה: הפרוצדורה Clear
#include <EEPROM.h> //Constants void setup() { //Init Serial USB Serial.begin(115200); delay(1500); for (int i=0; i<10 ;i++) { Serial.println("."); delay(100); } EEPROM.begin(512); // write a 0 to all 512 bytes of the EEPROM for (int i = 0; i < EEPROM.length(); i++) { EEPROM.write(i, 0); } // turn the LED on when we're done Serial.println("EEPROM Cleared"); EEPROM.end(); } void loop() { }
הקוד לכתיבה, פרוצדורת Write
#include <EEPROM.h> //Constants #define EEPROM_SIZE 50 void setup() { //Init Serial USB Serial.begin(115200); delay(1500); for (int i=0; i<10 ;i++) { Serial.println("."); delay(100); } Serial.println("Initialize System"); //Init EEPROM EEPROM.begin(EEPROM_SIZE); //Write data into eeprom int address = 0; String boardId = "Asaf Asaf"; EEPROM.put(address, boardId); address += sizeof(boardId); //update address value float param = 39.2; EEPROM.put(address, param); address += sizeof(param); String boardId2 = "Ofra Ofra"; EEPROM.put(address, boardId2); address += sizeof(boardId2); int teger = 71070; EEPROM.put(address, teger); EEPROM.commit(); EEPROM.end(); Serial.println("Commit Ended"); } void loop() { }
הקוד לקריאה, פרוצדורת Read
#include <EEPROM.h> //Constants #define EEPROM_SIZE 50 void setup() { //Init Serial USB Serial.begin(115200); delay(1500); for (int i=0; i<10 ;i++) { Serial.println("."); delay(100); } Serial.println("Initialize System"); //Init EEPROM EEPROM.begin(EEPROM_SIZE); int address = 0; String readId; EEPROM.get(address, readId); Serial.print("name = "); Serial.println(readId); address += sizeof(readId); //update address value Serial.print("add= "); Serial.println(address); float readParam; EEPROM.get(address, readParam); Serial.print("Read param = "); Serial.println(readParam); address += sizeof(readParam); //update address value String readId2; EEPROM.get(address, readId2); Serial.print("name2 = "); Serial.println(readId2); address += sizeof(readId2); int teger = 71070; EEPROM.get(address, teger); Serial.print("integer = "); Serial.println(teger); EEPROM.end(); Serial.println("Reading Ended"); } void loop() { }
לסיכום
אז זהו. נסו בעצמכם. ואם יש שאלות, הגיבו כאן במדריך ואנסה לעזור לכם.
בהצלחה.
לתוכן זה נכתבו 0 תגובות