من لوحة ESP32 فارغة إلى جهاز يرسل قراءاته إلى هاتفك، في جلسة واحدة. نصوص برمجية بلغة مفهومة بدل C، بلا سلسلة أدوات، وبلا خادم خاص بك، وبلا إعادة بناء. سريع بما يكفي لاختبار فكرة، وبسيط بما يكفي لأول حصة.
أول برمجة من المتصفح عبر USB. وبعدها كل شيء يمضي لاسلكياً.
يحوّل R1BBIT لوحة ESP32 إلى جهاز متصل جاهز — بلا سلسلة أدوات، وبلا خادم خاص بك، وبلا سطر واحد من لغة C.
يناسب ثلاثة أنواع من العمل بوجه خاص: الوصول بمنتج سريعًا إلى أول نسخة تعمل، واختبار فكرة قبل الالتزام ببنائها فعليًا، وتعلّم الإلكترونيات والروبوتات — وهذا الأخير خصوصًا لمن يبدأ من الصفر.
يضم الكتالوج عتادًا تحققنا منه يدويًا، غير أن المنظومة تعمل على أي ESP32 تقريبًا.
يحمل البرنامج الثابت مفسّراً، فتنفّذ اللوحة ملفاً نصياً عادياً بدل برنامج مترجَم. وأوامره الـ298 تغطّي الأطراف والحسّاسات والشاشات والصوت والكاميرا والشبكة — بلا C، وبلا سلسلة أدوات، وبلا ترجمة.
اكتب في المتصفح بإكمال تلقائي لكل أمر ومدقّق يلتقط الأخطاء أثناء الكتابة. ويستطيع المساعد أن يكتب لك النص أو يصلحه، ويعفيك معرض الأمثلة الجاهزة من الصفحة البيضاء. وحتى أول برمجة تجري هنا، عبر كابل USB.
تتصل اللوحات بها من تلقاء نفسها عبر قناة مشفّرة. تُحفظ القراءات وتُرسم بيانياً، وتصل النصوص والبرامج الثابتة الجديدة لاسلكياً، ولكل جهاز وحدة تحكم ومتصفّح ملفات تفتحهما من أي مكان.
القيمة التي تنشرها اللوحة تصير بطاقة على هاتفك؛ حرّك منزلقاً هناك فتستجيب اللوحة. ويحمل التطبيق أيضاً المحرر ووحدة التحكم والتوثيق والمساعد نفسه — ويستطيع أن ينبّهك حين يسوء شيء.
CONFIG
PSRAM_SIZE 8
PSRAM_TYPE OCTAL
I2C_SDA 16
I2C_SCL 15
SPI_MOSI 11
SPI_MISO 13
SPI_CLK 12
DISPLAY_DRIVER ILI9341
DISPLAY_CS 10
DISPLAY_DC 46
DISPLAY_BL 45
DISPLAY_WIDTH 320
DISPLAY_HEIGHT 240
TOUCH_DRIVER FT6x36
TOUCH_INT 17
END_CONFIG
DISPLAY_INIT
DISPLAY_WIDGET(1, "label", 20, 24, 280, 36)
DISPLAY_WIDGET(2, "arc", 90, 76, 140, 140)
VAR T, F
VAR A[1]
DS1820_INIT(A, 1000)
VARS_PUBLISH(T, F)
WHILE(1)
T = A[0]
F = T * 9 / 5 + 32 ' to Fahrenheit
UI_TEXT(1, "Temperature " + T + " C")
UI_VALUE(2, T)
IF T > 30 THEN SEND_NOTIFY("Greenhouse", "Too hot: " + T)
PAUSE 1000
WEND
يكتب مبرمِج المتصفح البرنامج الثابت من المتصفح عبر USB. بلا سلسلة أدوات، وبلا بحث عن مشغّلات.
في بيئة المتصفح أو في تطبيق الهاتف — بإكمال تلقائي، وتلميحات للوسائط في السطر نفسه، ومدقّق يفحص أنواع الوسائط أثناء الكتابة.
اضغط Run فيصل النص البرمجي إلى اللوحة خلال ثوانٍ: لاسلكيًا وعبر وصلة مشفّرة ودون أي كابل. ويمكن أن يأتي أيضًا من بطاقة SD أو من الطرفية. تحتفظ اللوحة به في الذاكرة، ويعيد AUTOSTART تشغيله عند التشغيل التالي.
الآن تراه يعمل: تصل القراءات إلى لوحتك وهاتفك نحو مرة كل ثانية، ويعرض الطرفية كل ما يطبعه النص البرمجي. إن اختلّ شيء، صحّح السطر وأعد إرساله. وفي الأثناء تكتسب اللوحة أوامر جديدة، لأن تحديثات البرنامج الثابت تصل لاسلكيًا هي الأخرى.
إن كنت وصلت إلى ESP32 عبر Arduino IDE، فأنت تعرف ثمن كل تعديل: أعد الترجمة، وصّل الكابل، أعد التحميل، وهكذا حتى يستقر المنطق. يمنحك Blynk وArduino Cloud لوحة وسحابة، لكن المنطق تحتهما ما زال C++ يجب إعادة بنائه ورفعه مع كل تعديل. أما R1BBIT فيبقي التحكم بيدك ويلغي إعادة البناء: المنطق نص برمجي تقرأه اللوحة، واللوحة ليست سوى المتغيرات التي تنشرها.
برنامجك ملف نصي تقرأه اللوحة وتنفّذه. عدّل سطراً في المتصفح، وأرسله إلى اللوحة، فيسري مفعوله — أما البرنامج الثابت نفسه فلا يتغيّر أبداً. وحتى التوصيل موصوف نصاً: تبديل شاشة أو نقل حسّاس إلى أطراف أخرى تعديلٌ لا بناءٌ جديد.
مع بيئة Arduino كل تعديل دورة ترجمة وإعادة برمجة عبر كابل.
لا شيء يُنصَّب ولا شيء تستضيفه. تتصل الأجهزة بـ cloud.r1bbit.com من علبتها، وتهبط القياسات في قاعدة بيانات زمنية وترسم نفسها بيانياً، ولكل جهاز طرفية عن بُعد ومدير ملفات. تحتاج بيانات من الإنترنت؟ يجلبها HTTP_GET من اللوحة مباشرة — بلا وسيط.
مع Blynk أو Arduino Cloud تكون اللوحة جاهزة، لكن الشيفرة خلفها ما زالت C++ تعيد بناءها ورفعها مع كل تعديل.
صِف ما ينبغي للجهاز أن يفعله، فيكتب المساعد المدمج نص R1BBIT-BASIC المناسب. وهو يرى نصك الحالي، فيستطيع أن يوسّعه أو يشرح لك أمراً أو يتعقّب الخطأ الذي عجزت عن إيجاده. وهو حاضر في بيئة المتصفح وفي تطبيق الهاتف على السواء.
روبوت المحادثة العام يخترع بلا تردّد أوامر لم تعرفها هذه اللغة قط.
27 نوعاً من الأدوات تُرسم على شاشة الجهاز نفسه: رسوم بيانية ومؤشرات ومنزلقات، وحتى خرائط OpenStreetMap. انشر متغيّراً فيصير بطاقة في التطبيق؛ حرّك المنزلق هناك فيستجيب ON_VAR على اللوحة. والإشعار أمر واحد لا غير.
عمليًا هي خطوة واحدة: أضف عنصرًا في التطبيق وحدّد له متغيرًا، فيشترك الجهاز فيه تلقائيًا ويبدأ بإرسال البيانات.
المفسّر معزول عن البرنامج الثابت. خطأ أثناء التشغيل يوقف النص؛ وتحتفظ اللوحة باتصالها وتتلقّى التصحيح لاسلكياً.
حتى 15 مهمة في الخلفية إلى جانب الحلقة الرئيسية، بمتغيّرات مشتركة ومجدوِل تعاوني — بلا شيفرة نظام تشغيل لحظي.
أضف وحدة SIM فتبقى القياسات والطرفية وتسليم النصوص عاملة حين ينقطع الواي فاي.
شغّل MP3 وموسيقى التراكر، وسجّل، واحسب FFT، وابثّ الكاميرا إلى متصفح أو إلى لوحة أخرى.
16 فصلاً، كل أمر مع وسائطه ومثال عليه، بالإنجليزية والروسية والإسبانية والفرنسية والألمانية.
معرض قوالب رسمي داخل بيئة التطوير، ومنتدى تُتبادل فيه النصوص ومخططات التوصيل.
العمل على الأنظمة المدمجة نادراً ما يكون برمجةً فحسب. هناك ملفات ينبغي نقلها إلى اللوحة، وصور على الشاشة أن تقرأها فعلاً، وخطوط عليها أن تتّسع في الذاكرة — وكثير مما الأفضل ألّا يصل إلى اللوحة أصلاً. كل ذلك في التبويب نفسه الذي فيه المحرر: بلا أدوات منفصلة، وبلا تنقّل ببطاقات الذاكرة.
افتح نافذة ملفات الجهاز فإذا أنت تنظر إلى ذاكرة لوحة قد تكون في مبنى آخر. تتصفّحها، وتسحب ملفاً إلى النافذة لرفعه، وتستعيد آخر، وتعيد التسمية، وتحذف، وتنشئ مجلدات — وتحفظ النص الذي تحرّره على الجهاز مباشرة. ومؤشر المساحة الحرة يبيّن ما سيتبقّى قبل أن تدفع خطاً كبيراً أو مقطعاً صوتياً.
ذاكرة اللوحة أقل من ميغابايت واحد — وصورة واحدة تلتهم نصفها. لذا اترك الوسائط في السحابة: ارفع الملف مرة، وأعطه اسماً قصيراً، واكتب هذا الاسم مسبوقاً بعلامة @. تجلبه اللوحة حين يطلبه النص، بالمقاس الذي يطلبه، ولا تحتفظ بشيء.
افتح صورة، وقصّها، وارسم فوقها، واختر عمق الألوان الذي تريده الشاشة — ثم خذ النتيجة إما مصفوفةً تُلصق في نصك أو ملفاً يُرسل مباشرة إلى اللوحة. والعدّاد في الأسفل يخبرك مسبقاً بكلفتها بالبايت.
حمّل أي خط TTF، واختر نطاقات الحروف التي تبقيها، وأصلح الحرف العنيد يدوياً بكسلاً بكسل. والسطر في الأسفل يحسب ما سيشغله من ذاكرة — وينبّهك حين يكون معظمه فراغاً، وهو السبب المعتاد في ألّا يتّسع الخط.
اضبط مساحة العمل على مقاس شاشتك، ثم اسحب إليها تسميات وأزراراً ومنزلقات ومؤشرات ورسوماً وقوائم ورتّبها على شبكة. اضغط زراً واحداً فتحصل على النص الذي يرسم تلك الشاشة بعينها — وهو يقرأ كذلك نصاً قائماً، فيمكن إعادة ترتيب التخطيط لاحقاً.
وحدات التراكر تُعزف في المتصفح وعلى اللوحة سواء بسواء. افتح واحدة فتجد شبكة الأنماط بكل نغمة ومؤثّر، وقائمة القنوات، وكل العيّنات — حرّرها هنا فيُعزف الملف نفسه من نصك.
يتحوّل المقطع إلى شريط لقطات تعدّلها واحدة واحدة: ترسم على إحداها، وتنسخها، وتقتطع مقطعاً. ثم تضغطه إلى ما تحتمله شاشة صغيرة: أبيض وأسود ببتّ واحد مع تنعيم، أو لون مضغوط.
أفلِت مقطوعة فترى شكل الموجة: تحدّد جزءاً، وتقصّه، وتبقي ما تحتاجه فقط. ثم تختار معدّل البتّات، فيخبرك السطر أسفله بالثمن مسبقاً: مقطوعة من دقيقتين ونصف نزلت من 15 ميغابايت إلى 1.3، وهو حجم يكفي لحفظها على اللوحة.
ما تصنعه هنا يذهب إلى اللوحة مباشرة — أو يبقى على الخادم، حيث يجده النص باسمه.
التطبيق ليس جهاز تحكم أضيف في النهاية، بل هو نفس سير العمل الذي في المتصفح. ابنِ لوحة المؤشرات، واكتب النصوص البرمجية وعدّلها، وانقل الملفات إلى اللوحة ومنها، وافتح طرفية، وراقب القيم الحية، واقرأ التوثيق، واسأل المساعد. سجّل الدخول فتجد كل أجهزة حسابك موجودة سلفًا.
المحرّر
الأدوات
الطرفية الصوت والفيديو على متحكم دقيق يعنيان عادةً برامج ترميز ومخازن مؤقتة وأسبوعاً من قراءة أوراق البيانات. هنا هما أوامر. الراديو، وبثّ الكاميرا، وقناة اتصال لاسلكي بين اللوحات والهواتف — كلٌّ منها بضعة أسطر، والسحابة تحمل حركة البيانات.
وجّه الأمر إلى ملف في الذاكرة، أو إلى ملف محفوظ على الخادم، أو مباشرة إلى محطة إذاعية على الإنترنت — فتفكّ اللوحة الترميز وتشغّل. وتستطيع كذلك أن تخبرك بما يُبثّ الآن، لأنها تقرأ بيانات المقطوعة من المحطة.
VAR title$
PLAY_AUDIO("https://mangoradio.stream.laut.fm/mangoradio")
WHILE 1
AUDIO_TITLE(title$)
PRINT "Now playing: " + title$
PAUSE 5000
WEND
ضع عدة لوحات في الغرفة نفسها فتسمع بعضها بعضاً. اضغط لتتكلّم، وأفلِت لتسمع. وتستطيع الهواتف دخول الغرفة نفسها، فيلتقي الجهاز والإنسان على قناة واحدة — وهو مفيد لورشة، أو بوابة، أو دفيئة في آخر الأرض.
CONFIG
IN1 4
IN1_PULL UP
END_CONFIG
JOIN_AUDIO_ROOM("myteam", 16)
WHILE 1
IF IN1 = 0 THEN PTT(1)
IF IN1 = 1 THEN PTT(0)
PAUSE 50
WEND
افتح غرفة فيديو فتنطلق الكاميرا مباشرة. شاهدها في تطبيق الهاتف أو في المتصفح، وتستطيع لوحة ثانية ذات شاشة دخول الغرفة نفسها مشاهِدةً — جرس باب يعرض نفسه على اللوحة في المطبخ، وبلا خادم خاص بك في المنتصف.
CAM_INIT
CAM_RESOLUTION(320, 240)
START_VIDEO_ROOM("frontdoor", 10)
// on the board with the screen:
// JOIN_VIDEO_ROOM("frontdoor")
يمضي الصوت والفيديو على قناة قليلة التأخير، مع تحويل تلقائي إن حُجبت. ويضيف الصوت كذلك عزف النغمات والألحان، ووحدات التراكر، والتسجيل بصيغتي WAV وMP3، ومحلّل طيف مباشراً.
كل أوامر الصوت والفيديويُبنى البرنامج الثابت لستة أهداف: ESP32-S3 وESP32-P4 وESP32-C6 وESP32-C3 وESP32 الكلاسيكي وS3 من دون PSRAM. واللوحات أدناه هي التي جرّبناها بأنفسنا. أحضر لوحة تطوير من العائلة نفسها فتنال كذلك كتلة CONFIG خاصة بها.
المنصّة المرجعية — الجديد يظهر هنا أولاً
The big-screen one
واي فاي 6 في حجم ضئيل
The smallest and cheapest
يُبنى أيضاً لـ ESP32 الكلاسيكي (D0WD) ولـ ESP32-S3 من دون PSRAM: اللغة نفسها والسحابة نفسها، بملحقات أقل.
المنظومة جاهزة للعمل التجاري اليوم. ابنِ جهازًا على ESP32، وسيشغّل البرنامج الثابت نفسه والسحابة نفسها والتطبيقات نفسها التي تدير أول لوحة على مكتبك مئةَ لوحة في الميدان. لا شيء يحتاج إلى إعادة كتابة يوم يتوقف المشروع عن كونه هواية.
يعمل R1BBIT على وحدات ESP32 قياسية يبيعها الموزعون بالجملة. الانتقال من قطعة واحدة إلى ألف قرارُ شراء لا إعادةَ تصميم، والنص البرمجي نفسه يعمل على كل واحدة منها.
النص المصحّح أو إصدار البرنامج الثابت الجديد ينطلق لاسلكيًا إلى كل اللوحات دفعة واحدة. لا أحد يقود إلى الموقع ومعه حاسوب وكابل.
كل جهاز يكتب قراءاته في السحابة، محفوظة لكل جهاز على حدة وجاهزة للرسم البياني شهورًا إلى الوراء. لا خادم خلفي تكتبه ولا قاعدة بيانات تديرها.
تطبيقا iOS و Android منشوران وجاهزان. الجهاز يتبع حساب مالكه، وتظهر عناصره هناك من تلقاء نفسها — لا أحد يبني تطبيقًا ثانيًا.
الجهاز مرتبط بحساب، وكل ما يتبادله مع السحابة — القياسات والأوامر والنصوص البرمجية والبرامج الثابتة — يمر عبر وصلة مشفّرة.
يضم الكتالوج عتادًا تحققنا منه يدويًا، لكن البرنامج الثابت يُبنى لستة أهداف من ESP32 — فلوحة من تصميمك تنضم إلى المنظومة نفسها.
إحصاءات معدات التبريد والمخازن المبردة، وتدفئة المباني وتكييفها، ومراقبة الورشة والبيت الزجاجي — خلف ذلك كله المنظومة نفسها.
R1BBIT للأعمالأول يوم مع متحكم دقيق يمضي غالبه في ما ليس برمجة: تنصيب بيئة، والبحث عن مشغّلات، واختيار اللوحة من قائمة، وانتظار الترجمة. R1BBIT يحذف ذلك اليوم. متصفح، ولوحة زهيدة الثمن، وكابل USB — فيكتب الصف منطقاً في النصف الأول من الحصة، لا في الحصة الثالثة.
CONFIG
OUT1 2
END_CONFIG
WHILE 1
OUT1 1
PAUSE 500
OUT1 0
PAUSE 500
WEND
CONFIG
I2C_SCL 7
I2C_SDA 6
END_CONFIG
VAR T, H
SI7021_INIT(T, H, 2000)
WHILE 1
PRINT "temp " + T + " hum " + H
PAUSE 2000
WEND
CONFIG
I2C_SCL 7
I2C_SDA 6
END_CONFIG
VAR T, H
SI7021_INIT(T, H, 2000)
VARS_PUBLISH(T, H)
WHILE 1
IF T > 27 THEN
SEND_NOTIFY("Too warm", STR$(T) + " C")
ENDIF
PAUSE 60000
WEND
كل نص هنا هو البرنامج كاملاً: لا ملف إعداد مخفي ولا مشروع يحتاج ضبطاً.
كل شيء يجري في المتصفح: على حاسوب مدرسي بلا صلاحيات إدارية، وعلى حاسوب محمول، وحتى على لوح. لا شيء يُحمَّل، ولا تراخيص، ولا نسخة تعمل على جهاز واحد فقط في الغرفة.
الأوامر تقول ما تفعله: DHT_INIT وPRINT وPAUSE وIF … THEN. يقرأ الطالب سطراً فيفهمه، فتصير الحصة عن الحلقات والشروط لا عن الفواصل المنقوطة والأقواس.
يعمل النص في مفسّر معزول. سطر خاطئ يوقفه ويكتب السبب؛ وتواصل اللوحة عملها وتتلقّى التصحيح بعد ثانية. لا عتاد يتلف، ولا حصة تضيع.
أصغر الرقاقات المدعومة تكلّف دولارات قليلة، ولوحة واحدة مع حسّاس هي مشروع عامل بالفعل. ومجموعة لصف كامل لا تحتاج إلى منحة.
بلا صلاحيات إدارية، وبلا تراخيص، وبلا نسخة للمختبر يتولّى أحدهم صيانتها.
التوثيق متاح بالإنجليزية والروسية والإسبانية والفرنسية والألمانية.
تنضم اللوحة إلى السحابة مرة واحدة، ويحمل هذا التفعيل معه ثلاثة أشهر من باقة Starter. بعدها تختار باقة أو تبقى على المجانية — واللوحة تعمل في الحالتين.
يُدفع مرة واحدة لكل لوحة، لا كل شهر. التفعيل يربط اللوحة بحسابك ويفتح ثلاثة أشهر من باقة Starter: المحرر والسحابة والتطبيقات والمساعد، كلها.
مجانًا
$6.99 / شهريًا
أو $69.99 سنويًا
$19.99 / شهريًا
أو $199 سنويًا
الأسعار لكل حساب بالدولار الأمريكي وتأتي مباشرة من نظام الفوترة لدينا. الدفع السنوي أقل من اثنتي عشرة دفعة شهرية. والباقة المجانية لا تحتاج بطاقة أصلًا.
افتح السحابة، أو اقرأ التوثيق، أو اسأل في المنتدى: اللوحة الأولى تأخذ أمسية لا عطلة أسبوع.
بيئة تطوير في المتصفح، ومعرض قوالب، ولوحات متابعة، وطرفية إلى كل لوحة — في المتصفح.
افتح السحابة