#include <PDM.h>
#include "chirp_connect.h"
#define CHIRP_APP_KEY "YOUR_APP_KEY"
#define CHIRP_APP_SECRET "YOUR_APP_SECRET"
#define CHIRP_APP_CONFIG "YOUR_APP_CONFIG"
#define SAMPLE_RATE 16000
#define BUFFER_SIZE 256
#define R_LED_PIN 22
#define G_LED_PIN 23
#define B_LED_PIN 24
// Global variables ---------------------------------------------------
static chirp_connect_t *chirp = NULL;
short sampleBuffer[BUFFER_SIZE];
volatile int samplesRead;
// Function definitions -----------------------------------------------
void setupChirp(void);
void chirpErrorHandler(chirp_connect_error_code_t code);
void onPDMdata(void);
// Main ---------------------------------------------------------------
void setup()
{
Serial.begin(115200);
// while (!Serial);
pinMode(R_LED_PIN, OUTPUT);
pinMode(G_LED_PIN, OUTPUT);
pinMode(B_LED_PIN, OUTPUT);
setupChirp();
PDM.onReceive(onPDMdata);
PDM.setGain(30);
if (!PDM.begin(1, SAMPLE_RATE))
{
Serial.println("Failed to start PDM!");
while (1);
}
analogWrite(R_LED_PIN, UINT8_MAX);
analogWrite(G_LED_PIN, UINT8_MAX);
analogWrite(B_LED_PIN, UINT8_MAX);
}
void loop()
{
if (samplesRead)
{
chirp_connect_error_code_t err = chirp_connect_process_shorts_input(chirp, sampleBuffer, samplesRead);
chirpErrorHandler(err);
samplesRead = 0;
}
}
void onPDMdata()
{
int bytesAvailable = PDM.available();
PDM.read(sampleBuffer, bytesAvailable);
samplesRead = bytesAvailable / sizeof(short);
}
// Chirp --------------------------------------------------------------
void onReceivingCallback(void *chirp, uint8_t *payload, size_t length, uint8_t channel)
{
Serial.println("Receiving data...");
analogWrite(R_LED_PIN, UINT8_MAX);
analogWrite(G_LED_PIN, UINT8_MAX);
analogWrite(B_LED_PIN, UINT8_MAX);
}
void onReceivedCallback(void *chirp, uint8_t *payload, size_t length, uint8_t channel)
{
if (length)
{
// High values mean lower brightness, so we
// subtract from UINT8_MAX
analogWrite(R_LED_PIN, UINT8_MAX - payload[0]);
analogWrite(G_LED_PIN, UINT8_MAX - payload[1]);
analogWrite(B_LED_PIN, UINT8_MAX - payload[2]);
}
else
{
analogWrite(R_LED_PIN, 0);
analogWrite(G_LED_PIN, UINT8_MAX);
analogWrite(B_LED_PIN, UINT8_MAX);
delay(500);
analogWrite(R_LED_PIN, UINT8_MAX);
delay(500);
analogWrite(R_LED_PIN, 0);
Serial.println("Decode failed");
}
}
void chirpErrorHandler(chirp_connect_error_code_t code)
{
if (code != CHIRP_CONNECT_OK)
{
const char *error_string = chirp_connect_error_code_to_string(code);
Serial.println(error_string);
exit(42);
}
}
void setupChirp(void)
{
chirp = new_chirp_connect(CHIRP_APP_KEY, CHIRP_APP_SECRET);
if (chirp == NULL)
{
Serial.println("Chirp initialisation failed.");
return;
}
chirp_connect_error_code_t err = chirp_connect_set_config(chirp, CHIRP_APP_CONFIG);
chirpErrorHandler(err);
char *info = chirp_connect_get_info(chirp);
Serial.println(info);
chirp_connect_free(info);
chirp_connect_callback_set_t callback_set = {
.on_state_changed = NULL,
.on_sending = NULL,
.on_sent = NULL,
.on_receiving = onReceivingCallback,
.on_received = onReceivedCallback
};
err = chirp_connect_set_callbacks(chirp, callback_set);
chirpErrorHandler(err);
err = chirp_connect_set_input_sample_rate(chirp, SAMPLE_RATE);
chirpErrorHandler(err);
err = chirp_connect_set_frequency_correction(chirp, 1.0096);
chirpErrorHandler(err);
err = chirp_connect_start(chirp);
chirpErrorHandler(err);
Serial.println("Chirp SDK initialised.");
Serial.flush();
}
بیشتر بدرد هک میخوره ولی خوب بنظرم توی جاهای پرنویز اصلا نمیتونه کار کنه البته مهم اینه از نظر شما جای پر نویز کجاست
داشتم نظرات رو میخوندم.
با زئوس موافقم به نظر من هم اصلا فناوری و متد جدیدی نیست. مخابرات زیرآب(مثلا زیردریایی) به همین شکل انجام میشه. منتهی پهنای باند و سرعت انتقال دیتا با توجه به فرکانس و سرعت انتقال کمتر موج صوتی نسبت به امواج الکترومغناطیس محدودتر هست.
اما برای محیط هایی مثل دریا که امواج الکترومغناطیس کارساز نیستن و سریع تضعیف میشن این روش استفاده میشه. همچنین سرعت انتقال موج صوتی در آب تقریبا پنج برابر هواست.
شاید جالب باشه، من در یک مستند دیدم که فیل ها با استفاده از پا روی زمین ارتعاش ایجاد میکنن و به فیلهای دیگه که چند کیلومتر باهاشون فاصله دارن سیگنال میدن و اطلاعات رد و بدل میکنن. فیل طرف مقابل هم از طریق پاهاش سیگنال رو دریافت میکنه. فکر میکنم از دود دادن سرخپوست ها خیلی موثرتر باشه 🙂
امنیت اطلاعات هم که تماما بستگی به الگوریتم رمزنگاری و نحوه انکود کردن دیتا در موج صوتی داره ولی یک مشکلی که فکر میکنم برای آردویینو وجود داشته باشه اینه که فایل های صوتی اگر با فرمت wav باشن حجیم هستن و اگر هم با فرمت های فشرده مثل mp3 باشن نیاز به پردازش دارن از طرف دیگه حتی اگر رمزنگاری هم در کار نباشه خود انکود و دکود کردن دیتا روی فایل صوتی بار پردازشی داره و همزمان آردویینو علاوه بر رمزنگاری/برداری باید نقش سینتی سایزر (در حالی که در rf میکسر یک واحد مجزاست) را هم ایفا کنه.
بنابراین آردویینو هم باید پردازش لازم برای پخش فایل رو انجام بده هم دیتا رو رمزنگاری/برداری کنه و هم دیتا رو روی فایل صوتی انکود/دکود کنه و عملا تبدیل به dds میشه. بعید میدونم که در توانش باشه.
در مورد مسئله نویز پذیری هم فکر میکنم با توجه به ماهیت صوتی این موج ها، نویز روی گیرنده ها زیاد باشه.
سلام دوست من.
Chirp را می توان با ادرینیو استفاده کرد ولی فکر نمی کنم فن اوری ادرینیو باشه.
Chirp sdk را قبل از قطع نت درحال بررسش بودم. ولی از حالات روحانی سایتشون ترسیدم چندوقت دیگه پولی بشه.
یا تحریم بشیم.
به هرحال
Chirp فراتر از یک ماژول سخت افزاری هستش و فقط بر روی هسته ارم قابل اجراست.
نه بحث امنیت بلکه بسیار ارزان قیمته.البته از لحاظ سخت افزاری.تا نت وصل بشه ببینیم کدش هم اوپن سورس هست یا نه.
ممنون از مطلبتون.
بیاید فکر کنیم هدف امن تر کردن اینترنت اشیاست به نظرم بجای بلنگو و میکروفن از سونار های فرستنده و گیرنده التراسونیک استفاده کنیم البته این یه نظر هست اما من که توانایی مالی انجام این پروژه رو ندارم اگه کسی این کامنت رو میخونه و توانایی مالی هم داره یک ماژول با فرستنده و گیرنده التراسونیک طراحی کنه مثل همین اینطوری با کیت شنود / هک تلفن همراه از طریق اکسپلویت و… ارتباط شنود نمیشه. و بعد مثل یه ماژول رو اردوینو بشینه. حالا سرعتمون بالاست و الودگی صوتی هم نداریم و … تو ساخت هم از محدوده فرکانس مناسب استفاده کنید تا موجب اسیب دیدن خردسال ها و یا جذب بعضی حشرات نشه
بدرود و موفق باشید.
من فکر میکردم یکی از دلایل استقبال از این تکنولوژی شاید ارزان بودنش باشه
اینطوری که ارزونم در نمیآد :/
به نظرم یه چیز صرفا فنی است و بی کاربرد ! شاید برای برد هایی که در نزدیکی هم قرار دارند و میخواهند چند بایت داده را منقل کنند با توجه به هزینه پایین سخت افزار مورد استفاده گزینه بدی نباشه ولی باید دید کتابخونه مورد استفاده قابل استفاده در میکروهایی ضعیف هم هست یا نه !!
صحیح فرمودید برای برد کم به صرفه نیست اما برنامه اش خیلی ساده در میاد شبیه یه پروتکل ساده که نیاز به دو سیم داشته باشه مانند یوزارت و این دو خط به سونار ها وصل بشن. از نظر ایده درکش اسونه ولی تو ساخت باید وقت گذاشت با اینحال بخاطر پاسخ به کامنت و توجه شما سپاسگذارم
خواهش میکنم دوست عزیز
موفق باشید
من فکر میکنم که هکر ها هنوز وارد این پروتکل ارتباطی نشدن وگرنه اصلا امن به نظر نمیرسه و فقط بازار کار میکروفن های شنود رو پر رونق میکنه امیدوارم این تکنولوژی هیچوقت وارد اینترنت اشیا در ابعاد گسترده نشه چو اینطوری فقط با هک یکی از نودهای داخل شبکه / یا یه نرم افزار جاسوسی / یا یه کیت شنود FM اسباب بازی همه چیز برباد میره… ولی این ایده که ارتباط جز بستر رادیویی باشه ایده بسیار عالی بود و تحت تاسیر قرارگرفتم
سلام منم واقعا دلیل امن بودنش رو نمی فهمم ؛ تنها نکته ای که به ذهنم میرسه در این خصوص اینه برد محدودش شاید دسترسی برای هکش رو کاهش بده اگر نه هکش که خیلی ساده است ؛ واقعا ساده است و پیچیدگی های سیستم رادیویی رو نداره
مهمترین نکته این روش ارسال همزمان دیتا به چند گیرنده بر خلاف بلوتوث
البته فکر کنم بلوتوث هم برادکست داشته باشه ! مطمئن نیستم البته