نكتة القط KiQ أو كيف صنعنا لعبة ناطقة للبالغين

لعبة Kiq

في العالم ، هناك كمية لا تصدق من ألعاب التحدث للأطفال وهذا يجعل الانطباع بأن البالغين يشعرون بالملل. قرر فريقنا تصحيح هذا الوضع.

بداية القصة


بدأ كل شيء بحقيقة أن فكرًا مشرقًا جاء إلى ذهن مستفسر من أحد أصدقائي وزميل في الشباك : لماذا لا يقتصر الأمر على الأطفال فحسب ، بل على البالغين أيضًا لتسلية النكات المواضيعية؟ لم تعد فائدة الحديد بأسعار معقولة ومثبتة جيدًا الآن أمرًا نادرًا أبدًا ، ولا يمكن أن تومض بالأضواء فحسب ، بل تغني أيضًا الأغاني .

في هذا الصدد ، اتصل بي وعرضت تكرار الإنجاز الملحمي للتأكد من أن ESP8266 يقوم بتشغيل موسيقى MP3 على الشبكة بحيث تكون جيدة وإذا كان الهامستر يمزق القطع ، هل هناك أداء كافٍ حقًا ، وهو ما فعلته بسرعة في عطلة رأس السنة الجديدة في عام 2016:


يقوم ESP8266 بتشغيل راديو الإنترنت على الفيديو ، وإخراج الصوت باستخدام PWM 5 بت عبر اختراق I2S.

ومع ذلك ، فإن تشغيل راديو MP3 من الإنترنت يستهلك تقريبًا مورد ESP8266 بالكامل ويطلق "كذا" ، في حين جذب الخيال بالفعل شيئًا أكثر من مجرد عمود راديو MP3. مع هذه الدوافع الإبداعية ، ذهبنا إلى فريقنا والطاهي المحبوب فلاديمير .

بعد القليل من العصف الذهني ، صورة أكثر تفصيلاً وحتى سلسلة منطقية لما لا نريده فقط ، ولكن يمكننا القيام به:

  • لاستبدال MP3 بشيء أقل تطلبًا للموارد وأكثر حرية ، توقفنا عند Speex ، الذي قام Flexxnn بنقله بنجاح وسرعة إلى ESP8266.

  • SD , .. , ESP8266 — .

  • « » - , random . , . Apple Notification Center Service (ANCS), iPod, iPhone iPad.

  • Bluetooth Low Energy (BLE), .

  • . Pawn language.

  • , — «» «» (), - .


في البداية ، كنت أرغب في إنشاء نموذج أولي بسيط للغاية ، ولكنه يعمل بشكل كامل على لوحة الكل في واحد ، لذلك قررنا تجربة MediaTek على LinkIt ONE . و netsnail نجحت على الفور تقريبا. كان هناك اتصال بالهاتف ومن بطاقة SD MP3 يلعب بشكل مثالي.
يبدو - هنا هو السعادة ومنصة جاهزة! ولكننا واجهنا بعد ذلك الواقع القاسي للقيود المفروضة على SDK المغلقة والمرح.

أدركنا أن المنصة النهائية على لوحة واحدة ، تلبي جميع رغباتنا ، لم تكن في طبيعتها ، مما يعني أنه كان علينا إنشاؤها من الصفر.

لذا ، كان علينا أن نختار (فبراير 2016) شريحة BLE الأكثر ملاءمة ، والتي يجب توصيلها بـ ESP8266. كوصلة بين ESP8266 وشريحة BLE (لم نكن نعرف نوع الرقاقة التي ستكون) ، قررنا استخدام معيار TWI (I2C).

ولكن مع BLE ، لم يكن الخيار رائعًا جدًا:

  • TI CC2541 - بطريقة ما لم يعجبني ذلك على الفور بسبب بنية 8051 ، وبدا 8 كيلوبايت من ذاكرة الوصول العشوائي حياة سهلة غير واعدة ، مع مراعاة عدد خدمات BLE والخصائص التي نحتاجها في اللعبة.

  • BCM20732 - بدا واعدًا جدًا ، ولكن في الواقع تبين أن SDK فظ جدًا ، و "سلسلة المفاتيح" من Broadcom WICED Smart BLE هي عربات التي تجرها الدواب لدرجة أنني لن أكتب أي شيء هنا حتى لا أقسم. اسمحوا لي أن أعرف إذا كان الوضع قد تحسن الآن.

  • nRF52832 — , . BLE — rekod , SDK , . BLE ANCS iPhone UART. SEGGER J-Link, .

  • nRF51822, SEGGER nRF52832. — nRF52832 nRF51822 !

ونتيجة لذلك ، بدا المكواة الأولى مثل عنكبوت الرتيلاء شيء من هذا القبيل:

عنكبوت الحديد

كان من المحزن جدًا أن نتعطل بسبب سقوط كابلات دوبونت ، خاصة على وحدة nRF51822 ، حيث كانت الدبابيس أصغر قليلاً.

خدمات BLE على nRF51822 وتطبيق iOS


ومع ذلك ، بدأت القضية وأنا بالفعل على حديد العنكبوت هذا في تنفيذ خدمات BLE وميزاته على nRF51822 ، وتقسيم كل شيء إلى النصف تقريبًا:

  • خدمة مركز إعلام Apple ( ANCS ) - لتلقي إشعارات الأحداث من هاتف ذكي.
  • خدمة Apple Current Time Service (CTS) - عند التوصيل ، تستغرق اللعبة وقتًا من الهاتف.
  • HandShake Service (HSS) — , , «» . , lientID pair Bluetooth, , . , .
  • Battery As Service (BAS) — .
  • Content Service (CONTS) — , ( ).
  • Settings Service (SETTS) — , (, ) ..

كان MaximKit في نفس الوقت يقدم طلبًا لنظام iOS .

الصورة
تظهر الصورة على اليمين الشاشة الرئيسية للتطبيق.

هنا لا يستطيع Flexxnn تحمل معاناتنا بسبب السقوط من الأسلاك وجعل أول نموذج أولي عادي في المنزل بمكواة ليزر :

أول أو أكثر النموذج الأولي

لا يظهر في الصورة ، ولكن هناك بالفعل فتحة لبطاقة microSD هناك. على الشال المربع الصغير أدناه - ALC5627 ، كان الصوت أفضل بكثير من PWM 5 بت عبر I2S. تم

اختيار AXP209 لإدارة الطاقة. يتيح لك شحن البطارية واستخدامها في نفس الوقت ومراقبة حالتها. الرقاقة شائعة جدًا ، ولكن لها العديد من التفاصيل في البرمجة والمكونات الخارجية المطلوبة ، ما يسمى "تسخير".

السحر على ESP8266


بالتوازي مع هذا ، قامت Flexxnn التي استدارت Speex ، FatFs إلى ESP8266 ، بعمل محمل إقلاع لـ ESP8266 و nRF51822 بحيث يكون من الممكن عدم تحديث البرنامج الثابت عن طريق الأسلاك ، ولكن للقيام بذلك عن طريق وضع ملفات البرامج الثابتة على بطاقة microSD.

شخصيا ، يبدو لي أن الأجانب ساعدوه ، لأنه قام بكل هذا في حوالي شهر. لكنه لا يعترف بأنه على اتصال بعقل غريب.

ثم النموذج الثاني الأكثر طبيعية:

أول أو أكثر النموذج الأولي

لكن النموذج الأولي الأكثر طبيعية لم يعد يصعد إلى لعبة لينة. وحتى لو دخل ، مع حركة حادة لمستخدم محتمل من لعبة ، سيصعد "غريب" ، وهو أمر غير مقبول بالطبع لـ MVP.

لذلك ، تقرر طلب رسم للمهنيين وهذا ما حدث نتيجة لذلك:

الصورة

يناسب هذا التصميم تمامًا القطة تمامًا ، على الرغم من أنه يبدو غير إنساني إلى حد ما:

الصورة

في نفس الوقت ، تم تأكيد المخاوف من أن الأحداث من الهاتف يمكن أن تأتي في كثير من الأحيان ونتيجة لذلك سيزعج المستخدم بدلاً من المرح. كان مطلوبا منطق تصفية مرنة ، والتي يمكن تغييرها بسهولة في أي وقت دون وميض. في هذا الصدد ، بعد أن درست العتاد وأدركت أنه لا توجد نصوص سريعة ومضغوطة لـ ESP8266 (Lua و microPython هم مترجمون) ، قررت أن أقوم بنقل لغة Pawn ، التي تنفذ بسرعة (فقط 18 مرة أبطأ من اللغة الأصلية).

بالمناسبة ، مصادر Pawn تشبه إلى حد كبير C ، لذلك من دواعي سروري تعديل النصوص - فقط قم بتجميعها في AMX bytecode ونسخها إلى بطاقة SD.

أدوات الغش. التظاهر بأنه iOS على Android


ثم "فجأة" تذكرنا جميعًا أن هواتف Android في العالم ليست صغيرة جدًا ، بل أكثر من الهواتف التي تعمل بنظام iOS.

ونتيجة لذلك ، كان علي أن أتحقق مما إذا كان بإمكاننا خداع الأدوات والتظاهر بأننا iOS على Android حتى يروا خدمة ANCS لا يمكن تمييزها عن Apple.

في النهاية ، نجح كل شيء ، وبعد أسبوع ، كانت الأدوات (وقطة قطنا ليست استثناء) تعتقد بصدق أن لدي جهاز iPhone مع خدمة ANCS ، متصلاً بجهاز Nexus 5 وحتى بجهاز Samsung Galaxy القديم بنظام Android 4.4.

اذهب سحابة


نظرًا لأنه لا أحد يحب الاستماع إلى نكتة عدة مرات (حقيقة) ، وهناك أيضًا تفضيلات وقيود ثقافية ، فقد تقرر لكل مستخدم إنشاء قائمة تشغيل فريدة. للقيام بذلك ، جاءت القضية للتعامل مع الخادم في السحابة.

ولكن كيف تقرر من سيحبها؟ هذا صحيح - دع المستخدم يقرر! للقيام بذلك ، قمت باكتشاف إيماءة أساسية على مقياس التسارع LIS3DH من STMicroelectronics. أحببت النكتة - إمالة القطة ، كما لو كانت "نعم" ، لم تعجبني النكتة - مائلة جانبًا ، كما لو كانت "لا". وأضاف "نسيتني لا" للهاتف - إذا فُقد اتصال BLE ، واكتشف مقياس التسارع الحركة ، ثم يتم حمل القط في مكان ما ، ويتم نسيان الهاتف.

بعد أن يقوم المستخدم بـ "polikal" وبالتالي تحديد تفضيلاته - تذهب المعلومات إلى خادم حيث يتم مقارنة "جينومات" قوائم التشغيل ويتم إنشاء مجموعات جديدة من النكات للمستخدم. لكن هذا موضوع لمقال منفصل.

الملخص


ونتيجة لذلك ، تحول الترفيه إلى منصة ممتازة يمكنها:

  • التواصل مع الهاتف عبر BLE وتلقي إشعارات الأحداث ؛
  • التواصل عبر WiFi وتنزيل المحتوى وتحديثات البرامج الثابتة ؛
  • حفظ وقراءة الملفات في FAT32 على microSD ؛
  • لعب النكات معبأة مع الترميز speex.
  • تحديد تفضيلات المستخدم باستخدام مقياس التسارع (الكشف عن الإيماءة)
  • تشكيل قوائم تشغيل لكل مستخدم بناءً على تفضيلاته في الفكاهة ؛

الجدير بالذكر أن "المقابض الذكية جدًا" قد تكون متصلة جيدًا بالدبابيس المقابلة (حتى فتحات الموصلات الموجودة على اللوح تُترك) و "حكيم القط" كما يحلو لهم. وهذا يجعل منصة الكل في واحد جذابة للمهتمين.

مع هذه المنصة ، بدأنا في إطلاق اللعبة ، حيث أطلقنا على اللعبة النهائية KiQ. في اليوم الأول ، تم جمع 40٪ ، والآن 57٪. لكن هذه قصة مختلفة تمامًا.

شكرا لجميع الذين قرأوا على هذا الخط. في انتظار أسئلة مثيرة للاهتمام منك.

Source: https://habr.com/ru/post/ar398389/


All Articles