در این اموزش یک ماژول ژیروسکوپ به esp32متصل شده است و با استفاده از این ماژول می توان شتاب در محور های x y zبرای سرور ارسال می شود و می توانید دیتا هارا بر روی داشبرد ببینید
# | نوع | تعداد | خرید |
---|---|---|---|
1 | esp32 | 1 | |
2 | سیم جامپر | 2 | |
3 | برد بورد | 1 | |
4 | ماژول ADXL345 | 1 |
برای برنامه نویسی این پروژه از نرم افزار اردوینو استفاده میکنیم.
https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json
tools-> manager Library
معرفی پایه ها در اموزش بخش قبل انجام شده است
چون ماژول ADXL345 از پروتکل I2C استفاده می کند باید کتابخانه Wire.h را صدا بزنیم
اولین قدم افزودن کتابخانه iotkaran می باشد که با استفاده از دستور include انجام می دهیم
ادرس سنسور را مشخص می کنیم این ادرس از دیتاشیت به دست امده است
توکن که از سرور گرفتید را وارد کنید می تونید به بخش اخر این صفحه مراجع ه کنید جهت ساخت توکن در داشبرد
نام wifi و پسورد wifi را وارد کنید تا میکرو بتواند به مودم متصل شود و به اینترنت دسترسی داشته باشد
یک شی از کتابخانه می سازیم
سریال میکرو را راه اندازی می کنیم
برای برقراری ارتباط بین میکرو و ماژول می بایسد ارتباط را با تابع زیر شروع کنیم
از ان جایی که ما برای برقراری ارتباط از i2c استفاده می کنیم می بایست برای صحبت با ماژول بیت هایی را برای ماژول ارسال کنیم و این پروسه باید بیت ،بیت انجام شود.
جهت شروع ارتباط میکرو برای ارسال دیتا از تابع() beginTransmission استفاده می کنیم
با استفاده از تابع می کنیم ()write به کدام رجیستر می خواهیم دسترسی داشته باشیم
و بعد از ارسال بیت های فرامین ارتباط بین میکرو و ماژول را می بندیم
مشخص کردن مود دستگاه که حالت sta باشد تا esp بتواند به مودم متصل شود
چک کردن وضعیت مودم در این بخش از کد تا زمانی که ماژول به وای فای مورد نظر متصل نشده،هر 500میلی ثانیه ،در سریال مانیتور نقطه چاپ میکند.و زمانی که متصل شد از این حلقه خارج میشود
نمایش ip دستگاه
اتصال به سرور iotkaran
احراز هویت توسط سرور iotkaran
این قسمت نیز مانند بخش قبل اموزش می باشد و می توانید به بخش دوم مراجع کنید
در این قسمت با استفاده از کتابخانه جیسون اردوینو یک کلید به نام Y Z X تعریف می کنیم و مقدار سنسور را در ان می ریزیم و مقدار شتاب هارا در ان قرار می دهیم
در این بخش با تعریف یم کتغیر string و سریالایز کردن مقادیر جیسون این مقادیر در متغیر output ریخته می شود
در این بخش که بخش نهایی می باشد بااستفاده از تابع ()IK.status وضعیت سرور را چک کرده و در صورت متصل بودن دستگاه به سرور اقدام به ارسال اطلاعات به سرور م کنیم با استفاده از تابع ()IK.send
اگر اتصال با سرور قطع شده باشد این بخش صدا زده می شود و پیامی بر روی سریال نمایش داده می شود که سرور قطه است و میکرو سعی می کند دوباره به سرور متصل شود و احراز هویت کند
و در اخر نیز یک تاخیر نیم ثانیه می گزاریم
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <Wire.h> // Wire library - used for I2C communication
#include <Iotkaran.h>
int ADXL345 = 0x53; // The ADXL345 sensor I2C address
float X_out, Y_out, Z_out; // Outputs
#define Token "your token"
const char* ssid = "ssid modem";
const char* password = "password modem";
Iotkaran IK;
void setup() {
Serial.begin(115200);
Wire.begin(); // Initiate the Wire library
Wire.beginTransmission(ADXL345); // Start communicating with the device
Wire.write(0x2D); // Access/ talk to POWER_CTL Register - 0x2D
Wire.write(8); // (8dec -> 0000 1000 binary) Bit D3 High for measuring enable
Wire.endTransmission();
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
IK.connect("server.Iotkaran.ir" , 2323); //Enter a host address and port
IK.authentication(Token);
}
void loop() {
// === Read acceleromter data === //
Wire.beginTransmission(ADXL345);
Wire.write(0x32); // Start with register 0x32 (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(ADXL345, 6, true); // Read 6 registers total, each axis value is stored in 2 registers
X_out = ( Wire.read() | Wire.read() << 8); // X-axis value
X_out = X_out / 256; //For a range of +-2g, we need to divide the raw values by 256, according to the datasheet
Y_out = ( Wire.read() | Wire.read() << 8); // Y-axis value
Y_out = Y_out / 256;
Z_out = ( Wire.read() | Wire.read() << 8); // Z-axis value
Z_out = Z_out / 256;
DynamicJsonDocument doc(1536);
doc["action"] = "status";
doc["data"]["datas"]["x"] = X_out;
doc["data"]["datas"]["y"] = Y_out;
doc["data"]["datas"]["z"] = Z_out;
doc["method"] = "request_set";
String Output;
serializeJson(doc, Output);
if (IK.status())
{
Serial.print("Send to server: ");
Serial.println(Output);
IK.send(Output);
}
else {
Serial.println("The client disconnected");
IK.reconnect("server.Iotkaran.ir" , 2323);
IK.authentication(Token);
}
delay(500);
}
پروژه مشابه
کامنت ها
هر هفته یک اموزش
هر هفته یک پروژه
هر هفته یک ویجت