<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GPIO &#8211; IoT-devices, LLC &#8211; Electronics manufacturer for IoT</title>
	<atom:link href="https://iot-devices.com.ua/tag/gpio/feed/" rel="self" type="application/rss+xml" />
	<link>https://iot-devices.com.ua</link>
	<description>Від модулів до складних пристроїв</description>
	<lastBuildDate>Mon, 08 May 2023 12:34:35 +0000</lastBuildDate>
	<language>uk</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://iot-devices.com.ua/wp-content/uploads/2020/05/iot-devices_logo_inversed_kromka_512x512_82ce62_white-100x100.jpg</url>
	<title>GPIO &#8211; IoT-devices, LLC &#8211; Electronics manufacturer for IoT</title>
	<link>https://iot-devices.com.ua</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Емулятор лічильника Гейгера GGreg20_V3 засобами ESP8266 Частина 3: Тестування та висновок</title>
		<link>https://iot-devices.com.ua/geiger-counter-emulator-ggreg20_v3-module-by-means-of-esp8266-part3-ua/</link>
		
		<dc:creator><![CDATA[iot-guru]]></dc:creator>
		<pubDate>Fri, 31 Mar 2023 12:58:07 +0000</pubDate>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Новини]]></category>
		<category><![CDATA[Тестування]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[emulator]]></category>
		<category><![CDATA[ESP12.OLED]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[Espressif]]></category>
		<category><![CDATA[Geiger]]></category>
		<category><![CDATA[geiger-counter]]></category>
		<category><![CDATA[GGreg20_V3]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[LUA]]></category>
		<category><![CDATA[NodeMCU]]></category>
		<category><![CDATA[SBM20]]></category>
		<category><![CDATA[tindie]]></category>
		<category><![CDATA[unit test]]></category>
		<guid isPermaLink="false">https://iot-devices.com.ua/?p=2842</guid>

					<description><![CDATA[Тестування емулятора Після того, як ми зібрали емулятор лічильника Гейгера і запрограмували ESP8266, ми можемо протестувати його, щоб переконатися, що він працює правильно. Склавши фізичну схему і розробивши та завантаживши / компілювавши Lua-код у контролери, запускаємо емулятор лічильника Гейгера та головний контролер, щоб перевірити як працює наш тестовий стенд. Як можна бачити, підключення емулятора дуже [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><a></a> Тестування емулятора</h2>



<p class="wp-block-paragraph">Після того, як ми зібрали емулятор лічильника Гейгера і запрограмували ESP8266, ми можемо протестувати його, щоб переконатися, що він працює правильно.</p>



<p class="wp-block-paragraph">Склавши фізичну схему і розробивши та завантаживши / компілювавши Lua-код у контролери, запускаємо емулятор лічильника Гейгера та головний контролер, щоб перевірити як працює наш тестовий стенд.</p>



<figure class="wp-block-image size-large"><a href="https://iot-devices.com.ua/wp-content/uploads/2023/01/esp12_oled_we_disp_ggreg20_hwemu-scaled.jpg"><img fetchpriority="high" decoding="async" width="1024" height="768" src="https://iot-devices.com.ua/wp-content/uploads/2023/01/esp12_oled_we_disp_ggreg20_hwemu-1024x768.jpg" alt="" class="wp-image-2588" srcset="https://iot-devices.com.ua/wp-content/uploads/2023/01/esp12_oled_we_disp_ggreg20_hwemu-1024x768.jpg 1024w, https://iot-devices.com.ua/wp-content/uploads/2023/01/esp12_oled_we_disp_ggreg20_hwemu-300x225.jpg 300w, https://iot-devices.com.ua/wp-content/uploads/2023/01/esp12_oled_we_disp_ggreg20_hwemu-768x576.jpg 768w, https://iot-devices.com.ua/wp-content/uploads/2023/01/esp12_oled_we_disp_ggreg20_hwemu-1536x1152.jpg 1536w, https://iot-devices.com.ua/wp-content/uploads/2023/01/esp12_oled_we_disp_ggreg20_hwemu-2048x1536.jpg 2048w, https://iot-devices.com.ua/wp-content/uploads/2023/01/esp12_oled_we_disp_ggreg20_hwemu-454x341.jpg 454w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption>Рис. Тестовий стенд емулятора GGreg20_V3 на базі ESP12.OLED (MCU_B) підключений до NodeMCU dev.board (MCU_A, поза меж фото)</figcaption></figure>



<p class="wp-block-paragraph">Як можна бачити, підключення емулятора дуже просте: кабель живлення micro USB та сигнальні дроти імпульсного виходу, а також за бажанням можна підключити debug-консоль через UART.</p>



<p class="wp-block-paragraph">На наступних скріншотах наводимо діагностичні дані і їх вимірювання. Також наводимо приклад розподілу подій на виході емулятора, який ми побудували, щоб можна було візуально показати, як працює генератор випадкових чисел контролера ESP8266 за запропонованою нами реалізацією через таймери.</p>



<figure class="wp-block-image size-large"><a href="https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_log_2022-12-01_222323.jpg"><img decoding="async" width="1024" height="631" src="https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_log_2022-12-01_222323-1024x631.jpg" alt="" class="wp-image-2590" srcset="https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_log_2022-12-01_222323-1024x631.jpg 1024w, https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_log_2022-12-01_222323-300x185.jpg 300w, https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_log_2022-12-01_222323-768x473.jpg 768w, https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_log_2022-12-01_222323-454x280.jpg 454w, https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_log_2022-12-01_222323.jpg 1421w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption>Рис. Тестовий стенд емулятора GGreg20_V3 на базі ESP12.OLED (MCU_B) підключений до NodeMCU dev.board (MCU_A, поза меж фото)</figcaption></figure>



<figure class="wp-block-image size-large"><a href="https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_distribution_2022-12-01_222323.jpg"><img decoding="async" width="1024" height="397" src="https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_distribution_2022-12-01_222323-1024x397.jpg" alt="" class="wp-image-2592" srcset="https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_distribution_2022-12-01_222323-1024x397.jpg 1024w, https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_distribution_2022-12-01_222323-300x116.jpg 300w, https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_distribution_2022-12-01_222323-768x298.jpg 768w, https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_distribution_2022-12-01_222323-1536x595.jpg 1536w, https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_distribution_2022-12-01_222323-454x176.jpg 454w, https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_distribution_2022-12-01_222323.jpg 1610w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption>Рис. Графічний розподіл 175 подій на виході емулятора в межах однієї хвилини</figcaption></figure>



<p class="wp-block-paragraph">Як ми можемо бачити, події, що генерує на виході емулятор, є хаотичними, тобто мають характер, де при побіжному вивченні не проглядається певний графічний патерн.</p>



<p class="wp-block-paragraph">Ось ще один графік тестового набору з 175 подій на хвилину, але трохи в іншому форматі. Зверніть увагу на горизонтальну вісь. Значення початкових порядкових номерів подій у циклі розташоване на цьому графіку випадковим чином, саме так, як вони відбувалися у реальності на виході емулятора:</p>



<figure class="wp-block-image size-large"><a href="https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_random_distribution_2022-12-07.jpg"><img loading="lazy" decoding="async" width="1024" height="476" src="https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_random_distribution_2022-12-07-1024x476.jpg" alt="" class="wp-image-2594" srcset="https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_random_distribution_2022-12-07-1024x476.jpg 1024w, https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_random_distribution_2022-12-07-300x139.jpg 300w, https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_random_distribution_2022-12-07-768x357.jpg 768w, https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_random_distribution_2022-12-07-454x211.jpg 454w, https://iot-devices.com.ua/wp-content/uploads/2023/01/10-ggreg20_v3_hwemu_esp12_oled_nodemcu_random_distribution_2022-12-07.jpg 1529w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption>Рис. Графічне зображення випадкових 175 подій на виході емулятора (ліва вісь) та вільної пам’яті (права вісь) контролера ESP8266 під час виконання 60-секундного циклу</figcaption></figure>



<p class="wp-block-paragraph">Звісно, перевірка справжньої випадковості подій не є метою даної публікації і виходить далеко за її межі. Ми просто спираємося на тезу, що ESP8266 має апаратний генератор справжніх випадкових чисел.</p>



<h2 class="wp-block-heading"><a></a>Відомі обмеження</h2>



<p class="wp-block-paragraph">Серед обмежень даного методу створення емулятора лічильника Гейгера, які наразі нам відомі, є кількість пам’яті контролера ESP8266, у якій ми створюємо в циклі необхідну кількість одноразових таймерів з випадковим часом спрацювання. Кожен таймер по суті є функцією, яка займає певну оперативну пам’ять.</p>



<p class="wp-block-paragraph">Таймери, що спрацювали одразу ж вивільняють пам’ять. Виконання розробленого нами коду нагадує пружину, що у циклі раз на хвилину різко стискається і поволі розтискається в межах наявної пам’яті контролера.</p>



<p class="wp-block-paragraph">Таким чином, максимальна можлива кількість подій, що генерується обраним нами методом створення випадкових подій на виході емулятора, напряму залежить від кількості вільної оперативної пам’яті та швидкодії контролера.</p>



<p class="wp-block-paragraph">Експериментально нами було встановлено, що ESP8266 з прошивкою NodeMCU та мовою Lua здатен впевнено генерувати близько 260 подій на хвилину. Це більш ніж достатня кількість імпульсів на хвилину для проекту емулятора та рівнів радіації які він начебто реєструє.</p>



<p class="wp-block-paragraph">Це наразі все, що ми запланували розповісти. Тепер ви знаєте нашу версію того, як можна самостійно зробити емулятор лічильника Гейгера, а також для чого і кому може бути корисним такий пристрій. Втім, якщо ви бажаєте придбати готовий до застосування емулятор, це можливо зробити на нашому сайті, або на Tindie.</p>



<p class="wp-block-paragraph">Сайт IoT-devices.com.ua:&nbsp;<a href="https://iot-devices.com.ua/product-uk/gcemu20_v1-geiger-counter-emulator/">GCcemu20_V1</a></p>



<p class="wp-block-paragraph">tindie.com:&nbsp;<a href="https://www.tindie.com/products/iotdev/gcemu20_v1-geiger-counter-emulator/" target="_blank" rel="noreferrer noopener">GCcemu20_V1</a></p>



<p class="wp-block-paragraph">Загалом, створення емулятора лічильника Гейгера може бути цікавим і пізнавальним проектом. Він дозволяє імітувати показання лічильника Гейгера без використання радіоактивних джерел. Ми сподіваємося, що цей посібник був корисним, і заохочуємо вас експериментувати з різними компонентами та методами програмування для подальшої кастомізації емулятора.</p>



<p class="wp-block-paragraph">Початок статті:</p>



<p class="wp-block-paragraph"><a href="https://iot-devices.com.ua/geiger-counter-emulator-ggreg20_v3-module-by-means-of-esp8266-part1-ua/">Емулятор лічильника Гейгера GGreg20_V3 засобами ESP8266: Частина 1. Вступ та загальний огляд</a></p>



<p class="wp-block-paragraph"><a href="http://Емулятор лічильника Гейгера GGreg20_V3 засобами ESP8266">Емулятор лічильника Гейгера GGreg20_V3 засобами ESP8266: Частина 2 Створення емулятора</a></p>



<p class="wp-block-paragraph">Бажаємо успіхів!</p>



<p class="wp-block-paragraph">Команда IoT-devices LLC</p>



<p class="wp-block-paragraph">&nbsp;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Емулятор лічильника Гейгера GGreg20_V3 засобами ESP8266: Частина 2 Створення емулятора</title>
		<link>https://iot-devices.com.ua/geiger-counter-emulator-ggreg20_v3-module-by-means-of-esp8266-part2-ua/</link>
		
		<dc:creator><![CDATA[iot-guru]]></dc:creator>
		<pubDate>Wed, 29 Mar 2023 11:50:27 +0000</pubDate>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Новини]]></category>
		<category><![CDATA[Тестування]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[emulator]]></category>
		<category><![CDATA[ESP12.OLED]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[Espressif]]></category>
		<category><![CDATA[Geiger]]></category>
		<category><![CDATA[geiger-counter]]></category>
		<category><![CDATA[GGreg20_V3]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[LUA]]></category>
		<category><![CDATA[NodeMCU]]></category>
		<category><![CDATA[SBM20]]></category>
		<category><![CDATA[tindie]]></category>
		<category><![CDATA[unit test]]></category>
		<guid isPermaLink="false">https://iot-devices.com.ua/?p=2813</guid>

					<description><![CDATA[Емулятор лічильника Гейгера: що нам знадобиться Для побудови емулятора лічильника Гейгера нам знадобляться наступні деталі та матеріали: ESP8266 #1 як основний (MCU_A, модуль NodeMCU); ESP8266 #2 як емулятор GGreg20_V3 (MCU_B, модуль ESP12.OLED); Дроти для перемичок; USB кабель для програмування та живлення. Далі нам потрібно буде запрограмувати основний контролер MCU_A та код скрипту емуляції програмного забезпечення [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading" id="block-786c35cc-31be-43f0-a658-40945e2c73d7">Емулятор лічильника Гейгера: що нам знадобиться</h2>



<p class="wp-block-paragraph">Для побудови емулятора лічильника Гейгера нам знадобляться наступні деталі та матеріали:</p>



<ul class="wp-block-list"><li>ESP8266 #1 як основний (MCU_A, модуль NodeMCU);</li><li>ESP8266 #2 як емулятор GGreg20_V3 (MCU_B, модуль ESP12.OLED);</li><li>Дроти для перемичок;</li><li>USB кабель для програмування та живлення.</li></ul>



<p class="wp-block-paragraph">Далі нам потрібно буде запрограмувати основний контролер MCU_A та код скрипту емуляції програмного забезпечення GGreg20_V3 для MCU_B.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>Примітка 3</strong>. Ми будемо наводити приклади у цій публікації на модулях власного виробництва <a href="https://iot-devices.com.ua/product-uk/esp12oled-universal-esp8266-mcuboard-oled/">ESP12.OLED</a>. Втім, якщо у вас немає модуля ESP12.OLED, ви також можете застосувати плату розробника на базі ESP8266, наприклад NodeMCU, і самостійно розробити програмне забезпечення керуючись прикладами, що наведено у тексті. Якщо ж ви бажаєте одразу користуватися готовим пристроєм, будь-ласка, дочитайте цю статтю до кінця, адже далі ми даємо посилання на наш готовий до використання модуль емулятора, який можливо придбати.</p></blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>Примітка 4.</strong> У цій, як і у інших наших публікаціях ми будемо наводити приклади простою та потужною скриптовою мовою програмування Lua, що доступна у популярній програмній прошивці NodeMCU.</p></blockquote>



<h2 class="wp-block-heading" id="block-fa9009c2-5b8c-41b0-bb8a-10108721c789">Бюджет необхідних нам входів/виходів</h2>



<p class="wp-block-paragraph" id="block-72e01d54-951b-4117-8327-b53872654d3a">На головному контролері макету нам необхідно визначити порти вводу/виводу, які будуть обслуговувати задачу реєстрації вхідних імпульсів від модуля емулятора лічильника Гейгера.</p>



<p class="wp-block-paragraph" id="block-dc43f265-c4cd-4a94-8940-0af029bf502d">На модулі емулятора лічильника Гейгера нам необхідно буде вже трохи більше портів. Тут необхідно задіяти порти вводу/виводу: для емуляції вихідних імпульсів, для RGB світлодіода та для кнопки перемикання режиму роботи емулятора.</p>



<figure class="wp-block-table"><table><tbody><tr><td><br>﻿</td><td>Роль MCU_A (Головний)</td><td>Роль MCU_B (Емулятор)</td></tr><tr><td>1 х GPIO лічильника вхідних імпульсів</td><td>NodeMCU</td><td>&#8211;</td></tr><tr><td>1 х GPIO емуляції вихідних імпульсів GGreg20_V3</td><td>&#8211;</td><td>ESP12.OLED</td></tr><tr><td>3 х GPIO RGB світлодіода індикації вихідних імпульсів GGreg20_V3</td><td>&#8211;</td><td>ESP12.OLED</td></tr><tr><td>1х GPIO кнопки перемикання режимів роботи емулятора</td><td>&#8211;</td><td>ESP12.OLED</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Схема підключення</p>



<p class="wp-block-paragraph" id="block-c6b2cc85-b3fb-4407-a53a-677106212716">Щоб взаємодія головного контролера з емулятором модуля GGreg20_V3 виглядала реалістично, пропонуємо скористатися вбудованими властивостями певних портів вводу/виводу плати ESP12.OLED і обрати на контролері емулятора MCU_B наступні GPIO:</p>



<ul class="wp-block-list" id="block-f010198d-685b-4fee-b4d6-3e1d8f38aeb3"><li>для емуляції імпульсного виходу GGreg20_V3 рекомендуємо використовувати GPIO4 / D2 (GPIO D-index в Lua);</li><li>для перемикання режимів роботи емулятора ми можемо використати вбудовану на платі ESP12.OLED кнопку Flash &#8211; GPIO0 / D3;</li><li>вбудований RGB-світлодіод на модулі ESP12.OLED займає GPIO14 / D5; GPIO12 / D6; GPIO13 / D7.</li></ul>



<p class="wp-block-paragraph" id="block-2527070a-42a1-48e0-983b-6cfc16e216fc">На модулі головного контролера MCU_A, пропонуємо обрати наступний порт для лічильника вхідних імпульсів:</p>



<ul class="wp-block-list" id="block-c8feffc1-6e34-42d2-b70e-3b3631fb85fb"><li>GPIO14 / D5.</li></ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>Примітка 5</strong>. У якості довідкового матеріалу за нумерацією портів рекомендуємо наступні матеріали: </p><p>Стандарт планування та застосування пінів, розроблений alterstrategy.lab: <a href="https://alterstrategy.com/recommended-pin-use-standard/" target="_blank" rel="noopener">ttps://alterstrategy.com/recommended-pin-use-standard/</a> </p><p>Документація на прошивку NodeMCU: <a href="https://nodemcu.readthedocs.io/en/latest/modules/gpio/" target="_blank" rel="noopener">https://nodemcu.readthedocs.io/en/latest/modules/gpio/</a> </p><p>Документація на модуль ESP12.OLED на сайті: <a href="https://iot-devices.com.ua/en/product/esp12oled-universal-esp8266-mcuboard-oled-en/">https://iot-devices.com.ua/en/product/esp12oled-universal-esp8266-mcuboard-oled-en/</a> </p><p>та на Tindie: <a href="https://www.tindie.com/products/iotdev/esp12oled-universal-esp8266096oled-mcu-board/" target="_blank" rel="noopener">https://www.tindie.com/products/iotdev/esp12oled-universal-esp8266096oled-mcu-board/</a></p></blockquote>



<p class="wp-block-paragraph" id="block-0017d8d7-e663-4e4b-8d4e-d20072cdf305">Оновимо таблицю з урахуванням конкретних портів вводу/виводу, які ми обрали:</p>



<figure class="wp-block-table"><table><tbody><tr><td><br>﻿</td><td>Роль MCU_A</td><td>Роль MCU_B</td></tr><tr><td>1 х GPIO лічильника вхідних імпульсів</td><td>NodeMCU GPIO14/ D5</td><td>&#8211;</td></tr><tr><td>1 х GPIO емуляції вихідних імпульсів GGreg20_V3</td><td>&#8211;</td><td>ESP12.OLED GPIO4 / D2</td></tr><tr><td>3 х GPIO RGB світлодіода індикації вихідних імпульсів GGreg20_V3</td><td>&#8211;</td><td>ESP12.OLED GPIO14 / D5 GPIO12 / D6 GPIO13 / D7</td></tr><tr><td>1х GPIO кнопки перемикання режимів роботи емулятора</td><td>&#8211;</td><td>ESP12.OLED GPIO0 / D3</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">﻿</p>



<figure class="wp-block-image size-full" id="block-3e816c74-b488-4f9c-af8a-46e7b768c80c"><a href="https://iot-devices.com.ua/wp-content/uploads/2023/01/10-the-esp12.oled-geiger-counter-emulator-and-nodemcu-wiring-diagram.jpg"><img loading="lazy" decoding="async" width="960" height="540" src="https://iot-devices.com.ua/wp-content/uploads/2023/01/10-the-esp12.oled-geiger-counter-emulator-and-nodemcu-wiring-diagram.jpg" alt="" class="wp-image-2586" srcset="https://iot-devices.com.ua/wp-content/uploads/2023/01/10-the-esp12.oled-geiger-counter-emulator-and-nodemcu-wiring-diagram.jpg 960w, https://iot-devices.com.ua/wp-content/uploads/2023/01/10-the-esp12.oled-geiger-counter-emulator-and-nodemcu-wiring-diagram-300x169.jpg 300w, https://iot-devices.com.ua/wp-content/uploads/2023/01/10-the-esp12.oled-geiger-counter-emulator-and-nodemcu-wiring-diagram-768x432.jpg 768w, https://iot-devices.com.ua/wp-content/uploads/2023/01/10-the-esp12.oled-geiger-counter-emulator-and-nodemcu-wiring-diagram-800x450.jpg 800w, https://iot-devices.com.ua/wp-content/uploads/2023/01/10-the-esp12.oled-geiger-counter-emulator-and-nodemcu-wiring-diagram-454x255.jpg 454w" sizes="(max-width: 960px) 100vw, 960px" /></a><figcaption>Рис. Підключення модулів з використанням двох апаратних контролерів ESP8266. У ролі MCU_B &#8211; модуль ESP12.OLED. У ролі MCU_A &#8211; модуль NodeMCU</figcaption></figure>



<h2 class="wp-block-heading" id="block-cb422977-8184-4a88-9c04-66d8e4c95e9d"><br>Режими роботи емулятора</h2>



<p class="wp-block-paragraph" id="block-4228e826-79a4-4376-aad4-045e96815dc7">Для того, щоб наш емулятор лічильника Гейгера GGreg20_V3 міг імітувати роботу в умовах різного рівня радіації пропонуємо реалізувати можливість перемикати діапазон потужності випромінювання, який начебто вимірюється пристроєм і подається на імпульсний вихід.</p>



<p class="wp-block-paragraph" id="block-4e0350bb-494c-480f-b831-a6e3d0c4b3ce">Натискаючи кнопку Flash (D3), користувач може поперемінно перемикати режими, щоб вибрати необхідний.</p>



<p class="wp-block-paragraph" id="block-8566cf3a-6d34-494a-a1c4-9783454ba6ad">Для зручності користування емулятором RGB-світлодіод модуля ESP12.OLED блимає різними кольорами, які легко розрізняються людським оком. За кожним режимом роботи емулятора закріплено свій колір. Тож коли емулятор видає на імпульсний вихід сигнал про вдаване “спрацювання”, світлодіод також буде блимати кольором поточного режиму роботи.</p>



<h2 class="wp-block-heading" id="block-63c378b0-b723-4c14-a913-697192337a31">Діапазони рівня радіації</h2>



<p class="wp-block-paragraph" id="block-d791023e-f3f0-4cb0-a8d6-56b4f2d848c6">Пропонуємо реалізувати емуляцію наступних діапазонів радіаційного випромінювання оточуючого середовища, яке буде імітувати MCU_B:</p>



<p class="wp-block-paragraph" id="block-b19d8848-2821-488d-9731-af30f8d6a932">Режим 0. Немає імпульсів (імітація помилки сенсора);</p>



<p class="wp-block-paragraph" id="block-b78e9cf4-f0ce-4bb5-a037-2e465dbc7279">Режим 1. Природне фонове випромінювання: 0.1 &#8211; 0.2 мкЗв/год;</p>



<p class="wp-block-paragraph" id="block-fcdb4d5e-1a51-47d4-b7eb-656d53f9f600">Режим 2. Припустимий рівень: 0.2 &#8211; 0.3 мкЗв/год;</p>



<p class="wp-block-paragraph" id="block-2b79a053-b8bb-4548-ad17-d8f31bb58219">Режим 3. Підвищений рівень: 0.3 &#8211; 0.6 мкЗв/год;</p>



<p class="wp-block-paragraph" id="block-555eda96-59ee-425b-b6bb-29b4d1775ecf">Режим 4. Небезпечний рівень: 0.6 мкЗв/год &#8211; 1.5 мкЗв/год.</p>



<p class="wp-block-paragraph" id="block-636beefb-1875-4800-b434-371a282b0432">За замовчуванням модуль буде стартувати після подачі живлення з “Режиму 1”. Цей режим ми обрали як початковий лише через те, що це зручно, коли подавши живлення ми одразу отримуємо імпульси на рівні фонового випромінювання.</p>



<p class="wp-block-paragraph" id="block-e688333a-52ff-469c-b8f4-9f9559f976a6">Реальний модуль GGreg20_V3 оснащено трубкою Гейгера радянського виробництва СБМ-20. Ця трубка має наступний коефіцієнт перерахунку імпульсів на хвилину у мікрозіверти на годину:</p>



<p class="has-text-align-center wp-block-paragraph" id="block-57d145ae-f971-436c-9dc2-ea5b1f3946aa">мкЗв на годину = CPM * 0.0057</p>



<p class="wp-block-paragraph" id="block-5f2d88d1-fa2a-4c1c-b998-6c2d35b5188d">Виконаємо обернену операцію, щоб розрахувати для діапазонів радіації відповідну вилку кількості імпульсів на годину, які мав би генерувати емулятор, працюючи у певному режимі:</p>



<p class="has-text-align-center wp-block-paragraph" id="block-1a1a2729-0148-4991-a7c5-b8d7190e5969">CPM = мкЗв на годину / 0.0057</p>



<p class="wp-block-paragraph" id="block-939c0593-7e19-41fe-940b-0d34f5a5af24">Робимо приблизний розрахунок таким чином, щоб утворити діапазони потужності, що не перетинаються за значенням:</p>



<p class="wp-block-paragraph" id="block-a0935c72-ddee-4500-92dd-caa443833e00">Режим 0. 0 CPM;</p>



<p class="wp-block-paragraph" id="block-bfbf37c0-e77a-40bb-a524-aecffb2f5ffc">Режим 1. від 18 CPM до 35 CPM;</p>



<p class="wp-block-paragraph" id="block-9b5a7549-1217-4a21-862e-6123d5f1fcc0">Режим 2. від 36 CPM до 52 CPM;</p>



<p class="wp-block-paragraph" id="block-a28b6f7b-2535-426d-97c5-289e31330abe">Режим 3. від 53 CPM до 105 CPM;</p>



<p class="wp-block-paragraph" id="block-4d52fbd2-bff2-4f66-b1a7-44a17677efb3">Режим 4. від 106 CPM до 264 CPM.</p>



<p class="wp-block-paragraph" id="block-0761ad79-1104-4eb4-8586-2b413119bad9">Співвіднесення кольору спалахів RGB-світлодіода певному режиму роботи є наступним:</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Режим роботи</strong></td><td><strong>Колір спалахів</strong></td><td><strong>R</strong></td><td><strong>G</strong></td><td><strong>B</strong></td></tr><tr><td>Режим 0</td><td>немає спалахів black</td><td>0</td><td>0</td><td>0</td></tr><tr><td>Режим 1</td><td>cyan</td><td>0</td><td>1</td><td>1</td></tr><tr><td>Режим 2</td><td>green</td><td>0</td><td>1</td><td>0</td></tr><tr><td>Режим 3</td><td>red</td><td>1</td><td>0</td><td>0</td></tr><tr><td>Режим 4</td><td>magenta</td><td>1</td><td>0</td><td>1</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Тепер нам лишається написати відповідний програмний Lua-код для ролі MCU_A та для ролі MCU_B.</p>



<h2 class="wp-block-heading" id="block-f6fa38ba-c4f6-4484-9e32-cb4c380574d4"><strong>Приклад</strong>. Код лічильника Гейгера для головного контролера (роль MCU_A)</h2>



<p class="wp-block-paragraph" id="block-923bc983-837f-4384-9148-96385e6b3e3b">Ми візьмемо цей код з GitHub за наступною адресою:</p>



<p class="wp-block-paragraph"><a href="https://github.com/iotdevicesdev/ggreg20-v3-nodemcu-lua-example" target="_blank" rel="noopener">https://github.com/iotdevicesdev/ggreg20-v3-nodemcu-lua-example</a></p>



<p class="wp-block-paragraph" id="block-0979654a-2651-4027-abcd-2ff33ce599d4">Код з GitHub повністю готовий до застосування. Щоб запускати код з GitHub, треба його скачати з інтернет і завантажити у контролер, наприклад у модуль NodeMCU, як у нашому випадку. Також необхідно написати ще один Lua-скрипт і його теж завантажити у контролер:</p>



<pre class="wp-block-code"><code>-- filename: mcu_a.lua
-- MCU_A Lua code example
-- Copyright 2022 IoT-devices LLC, Kyiv, Ukraine
dofile('ggreg20_v3_nodemcu_firmware_lua_example.lua')
init(5, 1, 60000)

function snsrUpd()
ma5_rad_lvl, cpm, minutes = read()
print(ma5_rad_lvl, cpm, minutes)
end

snsrUpd_tmr = tmr.create()
snsrUpd_tmr:register(60000, tmr.ALARM_AUTO, function() snsrUpd() end)
snsrUpd_tmr:start()</code></pre>



<h2 class="wp-block-heading" id="block-245d7efc-1d20-42e3-b2d1-14d29e6b7cb1"><strong>Приклад</strong>. Код для емулятора модуля GGreg20_V3 (роль MCU_B)</h2>



<p class="wp-block-paragraph" id="block-6f398d6f-0323-4900-81bf-fb082b4bb006">Документація на мову Lua нам підказує, що у швидкісних задачах необхідно робити перепризначення глобальних ідентифікаторів на локальні, що додає швидкості виконання у десятки разів. Тому ми це зробимо у такий спосіб:</p>



<pre class="wp-block-code"><code>local gpio = gpio
local mode = gpio.mode
local trig = gpio.trig
local write = gpio.write
local read = gpio.read
local INT = gpio.INT
local OUTPUT = gpio.OUTPUT
local FLOAT = gpio.FLOAT
local HIGH = gpio.HIGH
local LOW = gpio.LOW
local PULLUP = gpio.PULLUP
local print = print

local tmr = tmr
local create = tmr.create
local now = tmr.now
local delay = tmr.delay
local alarm = tmr.alarm
local ALARM_SINGLE = tmr.ALARM_SINGLE
local ALARM_SEMI = tmr.ALARM_SEMI
local ALARM_AUTO = tmr.ALARM_AUTO
local register = tmr.register
local start = tmr.start
local stop = tmr.stop

local node = node
local heap = node.heap
local random = node.random</code></pre>



<p class="wp-block-paragraph" id="block-02068264-0668-452a-a175-d7f2197ecf05">Також нам необхідно налаштувати GPIO, які у нас будуть відповідати за свої функції (див. вище):</p>



<pre class="wp-block-code"><code>mode(3,INT,FLOAT)
mode(4,OUTPUT, PULLUP)
write(4, HIGH)</code></pre>



<p class="wp-block-paragraph" id="block-67fa4fe3-dab6-44c3-b317-89d685a65809">Щоб генерувати імпульси, які імітують вихідний інтерфейс GGreg20_V3, нам потрібно випадковим чином запускати ось таку функцію:</p>



<pre class="wp-block-code"><code>local function pulseOut()
	write(4, LOW)
	delay(10)
	write(4, HIGH)
end</code></pre>



<p class="wp-block-paragraph" id="block-76bde581-ad02-443e-9b0e-1b0b5a802151">Але щоб у повній мірі забезпечити емуляцію лічильника Гейгера, нам недостатньо просто запустити <code>pulseOut()</code> визначену кількість разів на хвилину. Насправді все складніше, і нам необхідно таким чином запускати <code>pulseOut()</code>, щоб виконувалася справжня випадковість виникнення імпульсів на виході ESP8266.</p>



<p class="wp-block-paragraph" id="block-45dc16f8-88b4-48cc-b315-92da5ffdc8af">Зважаючи на широкі можливості платформи, можна було б запропонувати навіть декілька способів реалізації цієї функціональності, але ми обмежимося лише одним з них &#8211; тим, що на наш погляд максимально відтворює випадковість імпульсів реального модуля лічильника Гейгера.</p>



<p class="wp-block-paragraph" id="block-0b0c2c3e-e7e7-4aaf-a30c-395557aa8674">Для цього нам знадобиться скористатися генератором випадкових чисел, який відповідно до документації на прошивку NodeMCU здатен генерувати справжні випадкові числа. У прошивці для цього ми маємо готовий метод <code>node.random().</code></p>



<p class="wp-block-paragraph" id="block-c0c54a29-d8c5-4824-896e-cc3ce2eae785">Щоб хаотично розподілити обрану кількість імпульсів в межах однієї хвилини скористаємося таймерами, які можливо створювати у теоретично необмеженій кількості:</p>



<pre class="wp-block-code"><code>create():alarm(timer timeout, timer type, callback function)</code></pre>



<p class="wp-block-paragraph" id="block-a4766066-59e9-40ea-9b6e-8cfbb48c83e8">Єдиним обмеженням є кількість вільної оперативної пам’яті контролера. Експериментально ми встановили, що у такий спосіб без проблем можливо створювати близько 260 імпульсів на хвилину, що вкладається у наші вимоги до максимального рівня віртуальної радіації, яку може відтворити наш емулятор.</p>



<p class="wp-block-paragraph" id="block-cc004032-5661-4186-9c8c-e28b279f3726">Тож функція, яка у циклі створює випадкові таймаути запуску <code>pulseOut(),</code> має наступний вигляд:</p>



<pre class="wp-block-code"><code>local t_start = 0
local count = 0
local function randGen(pulses)
	for i = 1, pulses do -- pulses
			create():alarm(random(60000), ALARM_SINGLE, 
				function()
						print(heap(), count, i, (now() - t_start)/1000000)
						pulseOut()
				end
			)
	end
end</code></pre>



<p class="wp-block-paragraph" id="block-2b32df03-eab1-4d84-b60f-00e71a4c3ead">Працюючи у парі, розроблені нами функції <code>randGen(<em>pulses</em>)</code> та <code>pulseOut()</code> створюють необхідну нам кількість абсолютно випадкових імпульсів на виході ESP8266 тривалістю 10 мікросекунд кожен в межах однієї хвилини.</p>



<p class="wp-block-paragraph" id="block-70e9c748-19dd-4028-bbb7-5fe1f0280797">Кількість імпульсів на хвилину задаємо за допомогою параметра <em><code>pulses</code></em>.</p>



<p class="wp-block-paragraph" id="block-4a90ceb2-c169-4711-9d49-5b43bb34435e">Для того, щоб емулятор працював у різних режимах потужності удаваної радіації необхідно забезпечити випадкове значення кількості імпульсів <code><em>pulses</em>,</code> що потрапляє як завдання на вхід функції <code>randGen().</code> Це можна зробити наступним чином:</p>



<pre class="wp-block-code"><code>radMode = 1
rand_tmr = create()
rand_tmr:register(1000, ALARM_AUTO, 
	function()
		if radMode == 0 and running == 0 then 
			print(heap(), 'Mode0:Snsr Err emu')
			return 0
		end
		local num = 0
		if radMode == 1 then 
			num = random(math.ceil(18),math.ceil(35))
		elseif radMode == 2 then
			num = random(math.ceil(36),math.ceil(52))
		elseif radMode == 3 then
			num = random(math.ceil(53),math.ceil(105))
		elseif radMode == 4 then
			num = random(math.ceil(106),math.ceil(264))
		end
		if num ~= 0 then print('count:',count + 1,'mode:',radMode, 'num:',num); randGen(num) end
	end
)

rand_tmr:start()</code></pre>



<p class="wp-block-paragraph" id="block-e5b05b89-d43b-4a2d-8e18-2bffffe503be">Задаючи значення глобальної змінної <em><code>radMode</code></em>, користувач може задавати один з п’яти режимів потужності іонізуючого випромінювання, яке відтворює на виході емулятор.</p>



<p class="wp-block-paragraph" id="block-601d0a86-27e4-4066-a9a4-61d3770b1b94">Останнє, що нам необхідно передбачити у емуляторі, це перемикання режиму потужності радіації за допомогою вбудованої кнопки Flash / GPIO0 / D3:</p>



<pre class="wp-block-code"><code>trig(3, 'down', 
	function(lvl, ts, cnt)
		if radMode &lt; 4 then radMode = radMode + 1 else radMode = 0 end
		print ('New radMode:', radMode)
	end
)</code></pre>



<h3 class="wp-block-heading" id="block-1b688a62-cea2-48b8-811d-2e5cde4c87b1">Повний програмний код емулятора</h3>



<p class="wp-block-paragraph" id="block-be1e5721-a28c-4eb4-9552-eb301bf23577">Готового прикладу для цієї ролі контролера у нас немає, як було у випадку з головним контролером. Тож напишемо необхідний код з нуля. Ось мінімально необхідний код, який здатен виконувати емуляцію імпульсів лічильника Гейгера.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>Примітка 6.</strong> Наведений у даному розділі код є лише прикладом. Ви можете самостійно завантажити і налагодити роботу даного прикладу у власному емуляторі лічильника Гейгера, або придбати готовий до використання апаратний модуль з прошивкою та повнофункціональним програмним забезпеченням у нашому магазині чи на Tindie за наступними посиланнями:</p><p>Сайт: <a href="https://iot-devices.com.ua/product-uk/gcemu20_v1-geiger-counter-emulator/">GCcemu20_V1</a></p><p>Tindie: <a href="https://www.tindie.com/products/iotdev/gcemu20_v1-geiger-counter-emulator/" target="_blank" rel="noopener">GCcemu20_V1</a></p></blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>Увага!</strong> Код з лістингу прикладу має свої обмеження і суттєво відрізняється від того коду, який ми розробили для комерційного використання та продаємо у складі продукту емулятора на нашому сайті та інших комерційних майданчиках.</p></blockquote>



<pre class="wp-block-code"><code>-- filename: mcu_b.lua
-- MCU_B Lua code example
-- Copyright 2022 IoT-devices LLC, Kyiv, Ukraine
local t_start = 0
local count = 0
radMode = 0

local gpio = gpio
local mode = gpio.mode
local trig = gpio.trig
local write = gpio.write
local read = gpio.read
local INT = gpio.INT
local OUTPUT = gpio.OUTPUT
local FLOAT = gpio.FLOAT
local HIGH = gpio.HIGH
local LOW = gpio.LOW
local PULLUP = gpio.PULLUP
local print = print

local tmr = tmr
local create = tmr.create
local now = tmr.now
local delay = tmr.delay
local alarm = tmr.alarm
local ALARM_SINGLE = tmr.ALARM_SINGLE
local ALARM_SEMI = tmr.ALARM_SEMI
local ALARM_AUTO = tmr.ALARM_AUTO
local register = tmr.register
local start = tmr.start
local stop = tmr.stop

local node = node
local heap = node.heap
local random = node.random

mode(3,INT,FLOAT)
mode(4,OUTPUT, PULLUP)
write(4, HIGH)

local function pulseOut()
	write(4, LOW)
	delay(10)
	write(4, HIGH)
end

local function randGen(pulses)
	for i = 1, pulses do -- pulses
			create():alarm(random(60000), ALARM_SINGLE, 
				function()
						print(heap(), count, i, (now() - t_start)/1000000)
						pulseOut()
				end
			)
	end
end

rand_tmr = create()
rand_tmr:register(1000, ALARM_AUTO, 
	function()
		if radMode == 0 and running == 0 then 
			print(heap(), 'Mode0:Snsr Err emu')
			return 0
		end
		local num = 0
		if radMode == 1 then 
			num = random(math.ceil(18),math.ceil(35))
		elseif radMode == 2 then
			num = random(math.ceil(36),math.ceil(52))
		elseif radMode == 3 then
			num = random(math.ceil(53),math.ceil(105))
		elseif radMode == 4 then
			num = random(math.ceil(106),math.ceil(264))
		end
		if num ~= 0 then print('count:',count + 1,'mode:',radMode, 'num:',num); randGen(num) end
	end
)

rand_tmr:start()

trig(3, 'down', 
	function(lvl, ts, cnt)
		if radMode &lt; 4 then radMode = radMode + 1 else radMode = 0 end
		print ('New radMode:', radMode)
	end
)</code></pre>



<p class="wp-block-paragraph">Початок статті:  <a href="https://iot-devices.com.ua/geiger-counter-emulator-ggreg20_v3-module-by-means-of-esp8266-part1-ua/">Емулятор модуля лічильника Гейгера GGreg20_V3 засобами ESP8266: Частина 1. Вступ та загальний огляд </a></p>



<p class="wp-block-paragraph">Завершення статті за кілька днів у наступній публікації:<br>Емулятор модуля лічильника Гейгера GGreg20_V3 засобами ESP8266: Частина 3. Тестування та висновок</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Емулятор лічильника Гейгера GGreg20_V3 засобами ESP8266</title>
		<link>https://iot-devices.com.ua/geiger-counter-emulator-ggreg20_v3-module-by-means-of-esp8266-part1-ua/</link>
		
		<dc:creator><![CDATA[iot-guru]]></dc:creator>
		<pubDate>Mon, 27 Mar 2023 18:55:25 +0000</pubDate>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Новини]]></category>
		<category><![CDATA[Тестування]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[emulator]]></category>
		<category><![CDATA[ESP12.OLED]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[Espressif]]></category>
		<category><![CDATA[Geiger]]></category>
		<category><![CDATA[geiger-counter]]></category>
		<category><![CDATA[GGreg20_V3]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[LUA]]></category>
		<category><![CDATA[NodeMCU]]></category>
		<category><![CDATA[SBM20]]></category>
		<category><![CDATA[tindie]]></category>
		<category><![CDATA[unit test]]></category>
		<guid isPermaLink="false">https://iot-devices.com.ua/?p=2793</guid>

					<description><![CDATA[Ласкаво просимо до нашого посібника зі створення програмно-апаратного емулятора лічильника Гейгера GGreg20_V3 на базі ESP8266. Цей емулятор може бути корисним для тестування та налаштування лічильників Гейгера або у навчальних цілях. Давайте почнемо! Оновлено: Під час написання цієї статті, ми подумали і вирішили зробити окремий комерційний продукт &#8211; емулятор лічильника Гейгера GCemu20_V1. Частина 1: Вступ та [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Ласкаво просимо до нашого посібника зі створення програмно-апаратного емулятора лічильника Гейгера <a href="https://iot-devices.com.ua/product-uk/ggreg20_v3-ionizing-radiation-detector-with-geiger-tube-sbm-20/">GGreg20_V3</a> на базі ESP8266. Цей емулятор може бути корисним для тестування та налаштування лічильників Гейгера або у навчальних цілях. Давайте почнемо!</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>Оновлено:</strong> Під час написання цієї статті, ми подумали і вирішили зробити окремий комерційний продукт &#8211; емулятор лічильника Гейгера <a href="https://iot-devices.com.ua/product-uk/gcemu20_v1-geiger-counter-emulator/">GCemu20_V1</a>.</p></blockquote>



<h2 class="wp-block-heading">Частина 1: Вступ та загальний огляд</h2>



<p class="wp-block-paragraph">Загально відомо, що модуль Espressif ESP8266 має дуже якісний генератор випадкових чисел. Офіційні деталі щодо фактичної реалізації даного генератора нам знайти не вдалося, тож пропонуємо на цю тему подивитися матеріал, який було опубліковано радіоаматором і збережено в мережі інтернет:</p>



<p class="wp-block-paragraph"><a href="https://web.archive.org/web/20170321162556/http://esp8266-re.foogod.com/wiki/Random_Number_Generator" target="_blank" rel="noopener">https://web.archive.org/web/20170321162556/http://esp8266-re.foogod.com/wiki/Random_Number_Generator</a></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>Увага</strong>. У тексті застосовується два різних поняття, які мають однакову назву. Так історично склалося, що на ринку існує апаратний модуль NodeMCU, а також програмна прошивка NodeMCU. </p><p>Прошивка NodeMCU &#8211; це компільована мікропрограма з відкритим вихідним кодом, яка може записуватися на апаратні модулі з контролером ESP8266 компанії Espressif. Одним з величезної кількості продуктів на базі контролера ESP8266, є апаратний модуль NodeMCU. </p><p>Тож програмну прошивку NodeMCU можливо записати на апаратний модуль NodeMCU. У тексті цієї статті ми намагаємося, де це можливо, вказувати, що саме мається на увазі поруч з назвою NodeMCU: модуль чи прошивка.</p></blockquote>



<h2 class="wp-block-heading"><a></a>Для чого потрібен емулятор лічильника Гейгера</h2>



<p class="wp-block-paragraph">Перш ніж розпочати побудову емулятора лічильника Гейгера, необхідно розглянути для чого ж і кому може бути потрібен такий програмно-апаратний комплекс.</p>



<p class="wp-block-paragraph">Головна ідея будь-якого емулятора в галузі DIY-електроніки полягає у тому, щоб під час розробки IoT-пристроїв або проведення експериментів чи навчання, замість реального модуля тимчасово на певних етапах використовувати віртуальний компонент-замінник, який дозволяє відтворювати роботу та характеристики реального пристрою з високою точністю. Емулятор має спростити та прискорити розробку, а також додати зручності на початкових етапах запланованого проекту чи виконання модульних тестів.</p>



<p class="wp-block-paragraph">Ось кілька думок, що розлого пояснюють мотиви, якими ми керувалися, коли задумали розробити емулятор модуля лічильника Гейгера GGreg20_V3.</p>



<h3 class="wp-block-heading">1. Немає високої напруги</h3>



<p class="wp-block-paragraph">Емулятор GGreg20_V3, на відміну від справжнього модуля, не має високої напруги на платі, тому його дуже зручно використовувати під час розробки на столі і не боятися випадкового ураження струмом.</p>



<p class="wp-block-paragraph">В той же час, з точки зору електричного інтерфейсу вихідних імпульсів, емулятор є повністю аналогічним модулем сенсора радіації, що генерує випадкові імпульси такої ж форми та тривалості, як і справжній GGreg20_V3.</p>



<h3 class="wp-block-heading">2. Спрощений навчальний процес</h3>



<p class="wp-block-paragraph">Емулятор лічильника Гейгера добре лягає у набір для навчальних закладів. Викладач може поступово поглиблювати практичні заняття з студентами.</p>



<p class="wp-block-paragraph">Спочатку всі роботи у класі можуть проводитися на безпечних і дешевих емуляторах лічильника Гейгера, а вже потім на реальних модулях з трубками Гейгера та високою напругою на боці трубки. Як у військових: ознайомлення та тренування спочатку проводиться на холостих, а вже з досвідом на бойових боєприпасах.</p>



<p class="wp-block-paragraph">Емулятор повністю відтворює результати роботи справжнього модуля GGreg20_V3, тому немає проблеми недостатньої кількості реальних модулів у класі і кожен учень зможе самостійно працювати зі своїм модулем і повністю пройти процес навчання без поділу на групи чи черги, як це зазвичай буває, коли ресурси навчальних приладів та стендів у лабораторії обмежені.</p>



<h3 class="wp-block-heading">3. Нижча вартість</h3>



<p class="wp-block-paragraph">Емулятор має нижчу вартість, ніж справжній модуль GGreg20_V3, тому його не так шкода застосовувати, у першу чергу, для налагодження та узгодження схеми або програмного забезпечення системи, що проектується чи вивчається.</p>



<p class="wp-block-paragraph">Роботи з налагодження стенду чи проекту з таким емулятором можуть виконуватися без залучення відповідно кваліфікованого персоналу.</p>



<p class="wp-block-paragraph">Якщо емулятором користуються студенти, то викладач може не здійснювати особливого нагляду за роботою з приладами, як це буде необхідно робити з реальним модулем лічильника Гейгера.</p>



<p class="wp-block-paragraph">Емулятор, маючи низьку вартість, може закуповуватися у великих кількостях і видаватися студентам на весь час навчання, а не лише на час роботи у лабораторії навчального закладу.</p>



<h3 class="wp-block-heading">4. Справжнє джерело радіації не потрібне</h3>



<p class="wp-block-paragraph">Коли ми працюємо зі справжнім GGreg20_V3, нам потрібно мати справжнє джерело радіації, щоб відтворити різні ситуації, які необхідно передбачити у програмному забезпеченні системи вимірювання, що проектується або тестується. Щоб придбати тестове джерело радіації, радіоаматору потрібно заздалегідь вирішити низку завдань:</p>



<ul class="wp-block-list"><li>визначитися за фізико-хімічними параметрами, яке саме джерело потрібне;</li><li>знайти постачальника та придбати тестове джерело;</li><li>для деяких країн вимагається попередити митні служби і отримати дозвіл на ввіз через кордон;</li><li>тестове джерело може бути лише певної потужності;</li><li>потрібно правильно зберігати та утилізовувати такі інструменти, як радіоактивне джерело;</li><li>вартість справжнього джерела радіації та системи зберігання перевищує в рази вартість лічильника Гейгера.</li></ul>



<p class="wp-block-paragraph">З емулятором жодної з цих проблем не буде. Прилад вміє імітувати 5 різних режимів потужності іонізуючого випромінювання. Емулятор лічильника Гейгера створює вихідні імпульси аналогічні імпульсам справжнього модуля GGreg20_V3 у діапазоні від 0 до 1.5 мкЗв/год (якщо брати за аналогічний еталон трубку СБМ-20). На виході генеруються хаотичні (із застосуванням генератора справжніх випадкових чисел ESP8266) імпульси однакової амплітуди з тривалістю повного періоду імпульсу 10 мікросекунд кожен.</p>



<h3 class="wp-block-heading">5. Ресурс емулятора не виснажується</h3>



<p class="wp-block-paragraph">Трубка СБМ-20, яку встановлено у GGreg20_V3, має відносно великий, але все ж таки обмежений ресурс частинок, які вона може детектувати за своє життя.</p>



<p class="wp-block-paragraph">Заявлений у документації ресурс трубки СБМ-20 складає не менше 2*10<sup>10</sup> імпульсів.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>Примітка 1</strong>. За фонового випромінювання 0.15 мкЗв/год з коефіцієнтом 0.0057 трубка СБМ-20 детектувати близько 27 імпульсів на хвилину.</p></blockquote>



<p class="wp-block-paragraph">Таким чином, за нормальних умов ресурсу трубки вистачить на 2*10<sup>10</sup> / (27 * 60 * 24) = 20 000 000 000 / (26 * 60 * 24) = 514403 днів. І здавалося б, що це цілком достатній потенційний строк експлуатації однієї трубки.</p>



<p class="wp-block-paragraph">Зовсім інша картина спостерігається, коли йдеться про експлуатацію трубки з тестовим джерелом радіації.</p>



<p class="wp-block-paragraph">Наведемо приклад:</p>



<p class="wp-block-paragraph">На своєму сайті компанія Images Scientific Instruments наводить перелік дозволених до ввозу граничних рівнів радіоактивного випромінювання для тестових джерел:</p>



<p class="wp-block-paragraph"><a href="https://www.imagesco.com/geiger/radioactive-sources-int.html" target="_blank" rel="noopener">https://www.imagesco.com/geiger/radioactive-sources-int.html</a></p>



<p class="wp-block-paragraph">Візьмемо два джерела з наведеного за посиланням переліку:</p>



<ol class="wp-block-list"><li>Co-60 1.00 uCi, 37000 Bq;</li><li>Cs-137 0.25 uCi, 9250 Bq;</li></ol>



<p class="wp-block-paragraph">Якщо припустити, що під впливом такого тестового джерела половина частинок від радіоактивних розпадів потрапляють у трубку Гейгера СБМ-20, то ресурс такої трубки складе:</p>



<ol class="wp-block-list"><li>20 000 000 000 / (37000 / 2 * 60 * 60 * 24) = 12 днів (для Co-60);</li><li>20 000 000 000 / (9250 / 2 * 60 * 60 * 24) = 50 днів (для Cs-137).</li></ol>



<p class="wp-block-paragraph">Як можемо бачити, якщо ми хочемо ставити експерименти (чи тестувати свої пристрої, у складі яких є лічильник Гейгера) на реальній трубці, то ми виснажуємо її наявний ресурс реальним джерелом радіації досить швидко.</p>



<p class="wp-block-paragraph">З емулятором такої проблеми немає. Застосовувати спочатку емулятор замість трубки економічно доцільно.</p>



<h3 class="wp-block-heading"> 6. Дані налагодження в UART</h3>



<p class="wp-block-paragraph">Емулятор модуля GGreg20_V3 у процесі своєї роботи виводить у порт UART-консолі оперативні дані своєї роботи (імпульси, час, кількість, цикли і т.п.), які за необхідності може реєструвати і обробляти студент, розробник чи радіоаматор щоб навчатися, або порівнювати з вимірами своєї системи, яка тестується чи розробляється.</p>



<p class="wp-block-paragraph">Такої вбудованої можливості у справжнього модуля GGreg20_V3 та аналогічних модулів інших виробників немає і не може бути.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>Примітка 2</strong>. Для підключення до UART-консолі, модуль <a href="https://iot-devices.com.ua/product-uk/esp12-oled-komplekt-2-kontroler-iot-bez-displeya-na-osnovi-esp8266-12f/">ESP12.OLED</a>, на якому базується емулятор GGreg20_V3, має на друкованій платі окремо виведені лінії інтерфейсу UART (отвори з кроком 2.54 мм під пайку). Для підключення емулятора до комп’ютера користувачеві додатково потрібно мати власний перетворювач USB-UART. Далі у тексті буде наведено схему підключення.</p></blockquote>



<p class="wp-block-paragraph">Продовження статті у наступних публікаціях:<br><a href="https://iot-devices.com.ua/geiger-counter-emulator-ggreg20_v3-module-by-means-of-esp8266-part2-ua/">Емулятор модуля лічильника Гейгера GGreg20_V3 засобами ESP8266 Частина 2 Створення емулятора</a><br>Емулятор модуля лічильника Гейгера GGreg20_V3 засобами ESP8266 Частина 3: Тестування та висновок</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Технічна нотатка щодо виправлень у прошивці ESPHome для ESP32 стосовно режимів налаштувань GPIO та обробника переривань</title>
		<link>https://iot-devices.com.ua/technical-note-on-esp32-gpio-interrupt-esphome-bug-fixes-ua/</link>
		
		<dc:creator><![CDATA[iot-guru]]></dc:creator>
		<pubDate>Mon, 06 Mar 2023 14:02:26 +0000</pubDate>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Новини]]></category>
		<category><![CDATA[Bug-fix]]></category>
		<category><![CDATA[ESP32]]></category>
		<category><![CDATA[ESPHome]]></category>
		<category><![CDATA[Firmware-update]]></category>
		<category><![CDATA[geiger-counter]]></category>
		<category><![CDATA[GGreg20_V3]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[Interrupt]]></category>
		<category><![CDATA[ISR]]></category>
		<category><![CDATA[Pulse-Counter]]></category>
		<category><![CDATA[Pulse-output]]></category>
		<category><![CDATA[technical-note]]></category>
		<guid isPermaLink="false">https://iot-devices.com.ua/?p=2705</guid>

					<description><![CDATA[До уваги тих користувачів модуля лічильника Гейгера GGreg20_V3 підключеного до мікроконтролера ESP32 з прошивкою ESPHome, котрі створили свою прошивку раніше і ще не встигли оновити її до поточної версії. Просимо звернути увагу, що у грудні 2022 та у січні 2023 року вийшло кілька виправлень прошивки ESPHome, які можуть впливати на підрахунок імпульсів від лічильника Гейгера [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">До уваги тих користувачів модуля лічильника Гейгера GGreg20_V3 підключеного до мікроконтролера ESP32 з прошивкою ESPHome, котрі створили свою прошивку раніше і ще не встигли оновити її до поточної версії.</p>



<figure class="wp-block-image size-large"><a href="https://iot-devices.com.ua/wp-content/uploads/2023/03/esphome-2022_12_2_releasefixes.png"><img loading="lazy" decoding="async" width="1024" height="492" src="https://iot-devices.com.ua/wp-content/uploads/2023/03/esphome-2022_12_2_releasefixes-1024x492.png" alt="" class="wp-image-2713" srcset="https://iot-devices.com.ua/wp-content/uploads/2023/03/esphome-2022_12_2_releasefixes-1024x492.png 1024w, https://iot-devices.com.ua/wp-content/uploads/2023/03/esphome-2022_12_2_releasefixes-300x144.png 300w, https://iot-devices.com.ua/wp-content/uploads/2023/03/esphome-2022_12_2_releasefixes-768x369.png 768w, https://iot-devices.com.ua/wp-content/uploads/2023/03/esphome-2022_12_2_releasefixes-454x218.png 454w, https://iot-devices.com.ua/wp-content/uploads/2023/03/esphome-2022_12_2_releasefixes.png 1227w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">Просимо звернути увагу, що у грудні 2022 та у січні 2023 року вийшло кілька виправлень прошивки ESPHome, які можуть впливати на підрахунок імпульсів від лічильника Гейгера на порту мікроконтролера ESP32.</p>



<p class="wp-block-paragraph">1) Release 2022.12.3 &#8211; December 20 <a href="https://www.esphome.io/changelog/2022.12.0.html#release-2022-12-3-december-20" target="_blank" rel="noopener">https://www.esphome.io/changelog/2022.12.0.html#release-2022-12-3-december-20</a></p>



<p class="wp-block-paragraph">&#8211; Fix ESP32 GPIO when using PULLUP or PULLDOWN in INPUT mode #4213:</p>



<p class="wp-block-paragraph"><a href="https://github.com/esphome/esphome/pull/4213/files" target="_blank" rel="noopener">https://github.com/esphome/esphome/pull/4213/files</a></p>



<p class="wp-block-paragraph">2) Release 2022.12.4 &#8211; January 20&nbsp;</p>



<p class="wp-block-paragraph"><a href="https://www.esphome.io/changelog/2022.12.0.html#release-2022-12-4-january-20" target="_blank" rel="noopener">https://www.esphome.io/changelog/2022.12.0.html#release-2022-12-4-january-20</a></p>



<p class="wp-block-paragraph">&#8211; Fix gpio pin mode for ISR pins #4216:</p>



<p class="wp-block-paragraph"><a href="https://github.com/esphome/esphome/pull/4216/files" target="_blank" rel="noopener">https://github.com/esphome/esphome/pull/4216/files</a></p>



<p class="wp-block-paragraph">Через помилкову роботу / налаштування (без вказаних вище виправлень) обробника переривань, користувачі GGreg20_V3 та подібних лічильників Гейгера з імпульсним виходом могли спостерігати помилкові значення рівня радіації.&nbsp;</p>



<p class="wp-block-paragraph">Радимо користувачам GGreg20_V3 та ESP32 з прошивкою ESPHome звернути увагу на ці виправлення і за можливості встановити їх як і інші наявні оновлення прошивки ESPHome на контролери, до яких ви підключаєте сенсори з імпульсним виходом.</p>



<p class="wp-block-paragraph">Зверніть також увагу, що команда IoT-devices, LLC не проводила технічних випробувань з виправленнями та без них і не може точно вказати на характер впливу цих помилок у попередніх версіях прошивки і відповідних виправлень на роботу контролера ESP32 з перериваннями.</p>



<p class="wp-block-paragraph">Якщо після встановлення оновлень з виправленнями ви помітили зміни у роботі вашого модуля лічильника Гейгера GGreg20_V3, будь-ласка, поділіться з нами та DIY/IoT &#8211; спільнотою своїм досвідом.</p>



<p class="wp-block-paragraph">Найкращі побажання,</p>



<p class="wp-block-paragraph">Team IoT-devices, LLC</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Новий YAML-конфіг для GGreg20_V3 та ESP32 з фільтрацією брязкоту та точними налаштуваннями порту вхідних імпульсів на GitHub</title>
		<link>https://iot-devices.com.ua/ggreg20-v3-esp32-homeassistant-esphome-yaml-config-ua/</link>
		
		<dc:creator><![CDATA[iot-guru]]></dc:creator>
		<pubDate>Sat, 25 Feb 2023 18:43:34 +0000</pubDate>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Тестування]]></category>
		<category><![CDATA[debounce]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[ESP32]]></category>
		<category><![CDATA[ESPHome]]></category>
		<category><![CDATA[esphome-config]]></category>
		<category><![CDATA[geiger-counter]]></category>
		<category><![CDATA[GGreg20_V3]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[Home Assistant]]></category>
		<category><![CDATA[ionizing radiation]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[Pulse-Counter]]></category>
		<category><![CDATA[yaml-config]]></category>
		<guid isPermaLink="false">https://iot-devices.com.ua/?p=2661</guid>

					<description><![CDATA[Нещодавно ми створили новий&#160;репозиторій&#160;GitHub, призначений для GGreg20_V3 та ESP32 з усуненням брязкоту на GPIO лічильника імпульсів у мікросекундах&#160;аж до часу нечутливості трубки Гейгера СБМ20 (190 мкс). Та перевірили цю YAML- конфігурацію на ESP32 Wroom (модуль, схожий на NodeMCU) з використанням&#160;GPIO23 як входу лічильника імпульсів.&#160; Раніше ми не помічали, що API лічильника імпульсів ESPHome має можливість [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Нещодавно ми створили новий&nbsp;<a href="https://github.com/iotdevicesdev/GGreg20_V3-ESP32-HomeAssistant-ESPHome" target="_blank" rel="noreferrer noopener">репозиторій</a>&nbsp;GitHub, призначений для GGreg20_V3 та ESP32 з усуненням брязкоту на GPIO лічильника імпульсів у мікросекундах&nbsp;аж до часу нечутливості трубки Гейгера СБМ20 (190 мкс). Та перевірили цю YAML- конфігурацію на ESP32 Wroom (модуль, схожий на NodeMCU) з використанням&nbsp;GPIO23 як входу лічильника імпульсів.&nbsp;</p>



<figure class="wp-block-image size-large"><a href="https://iot-devices.com.ua/wp-content/uploads/2023/02/ggreg20_v3_esp32_yaml_ha_esphome_eng.jpg"><img loading="lazy" decoding="async" width="1024" height="683" src="https://iot-devices.com.ua/wp-content/uploads/2023/02/ggreg20_v3_esp32_yaml_ha_esphome_eng-1024x683.jpg" alt="" class="wp-image-2664" srcset="https://iot-devices.com.ua/wp-content/uploads/2023/02/ggreg20_v3_esp32_yaml_ha_esphome_eng-1024x683.jpg 1024w, https://iot-devices.com.ua/wp-content/uploads/2023/02/ggreg20_v3_esp32_yaml_ha_esphome_eng-300x200.jpg 300w, https://iot-devices.com.ua/wp-content/uploads/2023/02/ggreg20_v3_esp32_yaml_ha_esphome_eng-768x512.jpg 768w, https://iot-devices.com.ua/wp-content/uploads/2023/02/ggreg20_v3_esp32_yaml_ha_esphome_eng-454x303.jpg 454w, https://iot-devices.com.ua/wp-content/uploads/2023/02/ggreg20_v3_esp32_yaml_ha_esphome_eng.jpg 1500w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">Раніше ми не помічали, що API лічильника імпульсів ESPHome має можливість застосовувати фільтр подій на низькому рівні . Ми сподіваємося, що цей приклад допоможе багатьом користувачам протидіяти брязкоту, який іноді може виникати в системах з трубками Гейгера і подібних високовольтних системах.</p>



<p class="wp-block-paragraph">Посилання:</p>



<p class="wp-block-paragraph"><a href="https://github.com/iotdevicesdev/GGreg20_V3-ESP32-HomeAssistant-ESPHome" target="_blank" rel="noopener">https://github.com/iotdevicesdev/GGreg20_V3-ESP32-HomeAssistant-ESPHome</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Чому ми не додали інтерфейс I2C у модуль GGreg20_V3</title>
		<link>https://iot-devices.com.ua/why-we-didnt-add-the-i2c-interface-to-the-ggreg20_v3-module-uk/</link>
		
		<dc:creator><![CDATA[iot-guru]]></dc:creator>
		<pubDate>Sat, 28 May 2022 19:24:07 +0000</pubDate>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Тестування]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ESP-IDF]]></category>
		<category><![CDATA[ESPHome]]></category>
		<category><![CDATA[Espressif]]></category>
		<category><![CDATA[Geiger]]></category>
		<category><![CDATA[Geiger-Counter-Device]]></category>
		<category><![CDATA[GGreg20_V3]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[Home Assistant]]></category>
		<category><![CDATA[I2C]]></category>
		<category><![CDATA[ionizing radiation]]></category>
		<category><![CDATA[IoT-devices]]></category>
		<category><![CDATA[ISR]]></category>
		<category><![CDATA[LUA]]></category>
		<category><![CDATA[MicroPython]]></category>
		<category><![CDATA[NodeMCU]]></category>
		<category><![CDATA[Pulse-Counter]]></category>
		<category><![CDATA[SBM20]]></category>
		<category><![CDATA[STM32]]></category>
		<category><![CDATA[Tasmota]]></category>
		<guid isPermaLink="false">https://iot-devices.com.ua/?p=1993</guid>

					<description><![CDATA[І дійсно, чому б не додати на модуль такий зручний інтерфейс? Пропонуємо до вашої уваги наш черговий матеріал, де ми цього разу розмірковуємо про переваги та недоліки оснащення модуля детектора іонізуючої радіації GGreg20_V3 інтерфейсом I2C. Одразу зазначимо, що серед інших інтерфейсів передачі даних нам дуже подобається послідовна шина I2C за її простоту, функціональність та надійність [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="aligncenter size-large"><a href="https://iot-devices.com.ua/wp-content/uploads/2022/05/6-ggreg20_v3_iot-deviceslogo_i2c_publpic_ukr.png"><img loading="lazy" decoding="async" width="1024" height="683" src="https://iot-devices.com.ua/wp-content/uploads/2022/05/6-ggreg20_v3_iot-deviceslogo_i2c_publpic_ukr-1024x683.png" alt="GGreg20_V3, I2C" class="wp-image-2021" srcset="https://iot-devices.com.ua/wp-content/uploads/2022/05/6-ggreg20_v3_iot-deviceslogo_i2c_publpic_ukr-1024x683.png 1024w, https://iot-devices.com.ua/wp-content/uploads/2022/05/6-ggreg20_v3_iot-deviceslogo_i2c_publpic_ukr-300x200.png 300w, https://iot-devices.com.ua/wp-content/uploads/2022/05/6-ggreg20_v3_iot-deviceslogo_i2c_publpic_ukr-768x512.png 768w, https://iot-devices.com.ua/wp-content/uploads/2022/05/6-ggreg20_v3_iot-deviceslogo_i2c_publpic_ukr-454x303.png 454w, https://iot-devices.com.ua/wp-content/uploads/2022/05/6-ggreg20_v3_iot-deviceslogo_i2c_publpic_ukr.png 1500w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure></div>



<p class="wp-block-paragraph">І дійсно, чому б не додати на модуль такий зручний інтерфейс? Пропонуємо до вашої уваги наш черговий матеріал, де ми цього разу розмірковуємо про переваги та недоліки оснащення модуля детектора іонізуючої радіації GGreg20_V3 інтерфейсом I2C. </p>



<p class="wp-block-paragraph">Одразу зазначимо, що серед інших інтерфейсів передачі даних нам дуже подобається послідовна шина I2C за її простоту, функціональність та надійність роботи. Ви можете ознайомитися з іншими публікаціями, де ми розглядаємо цю чудову шину: <br><a href="https://iot-devices.com.ua/how-to-choose-the-right-i2c-chips-ukr/">Як правильно вибрати I2C чіпи. Або про приховану програмну проблему вибору<br>апаратних модулів</a> / <a href="https://iot-devices.com.ua/en/how-to-choose-the-right-i2c-chips-en/">How to choose the right I2C chips. Or the hidden software problem of<br>choosing hardware modules</a></p>



<p class="wp-block-paragraph"><a href="https://iot-devices.com.ua/application-of-i2c-bus-interface-splitter/">Application of I2C bus interface splitter</a> </p>



<p class="wp-block-paragraph">Втім, під час роботи над GGreg20_V3 нашою метою було і є забезпечити якомога ширшу сумісність цього нашого продукту з різними системами.</p>



<p class="wp-block-paragraph">Ось подивіться:</p>



<p class="wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color">(1)</mark></strong> Коли  якийсь модуль чи мікросхема має інтерфейс комунікації I2C (чи SPI, UART), це автоматично вимагає написати для такого пристрою низькорівневий драйвер-коннектор.</p>



<p class="wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color">(2)</mark></strong> Також такий пристрій взагалі не може інтегруватися з іншими компонентами, які заздалегідь не підтримують певний інтерфейс обміну даними чи керування, як-от I2C. Буває купа проектів, у яких немає I2C, або ж під шину I2C не вистачає вільних GPIO.</p>



<p class="wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color">(3)</mark></strong> Модуль вимірювання радіації, за певних умов, має бути спроможним застосовуватися у польових умовах, без підключення до головного контролера. Користувач має мати змогу використати такий пристрій незалежно від умов, в яких він опинився. Без програмування чи апаратних доробок.</p>



<p class="wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color">(4)</mark></strong> Оснащення модуля інтерфейсом I2C вимагає розташування на модулі вбудованого контролера-компаньйона, який забезпечує підготовку даних для споживача та комунікацію у режимі підпорядкованого пристрою (Slave Device) відповідно до специфікації I2C. Хоча це може бути простий і недорогий контролер, його наявність підвищує вартість, а також збільшує розміри модуля. Також потрібно виділити додаткове місце на платі модуля під площадки вибору адреси. </p>



<p class="wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color">(5)</mark></strong> Модуль з інтерфейсом I2C обов&#8217;язково потребує наявності головного контролера та дисплею, щоб ним можливо було користуватися за призначенням. І це при тому, що на модулі вже є вбудований контролер &#8211; компаньйон. Головні контролери бувають дуже різні. Хтось використовує Raspberry Pi, або ж Arduino, а комусь важливо мати можливість застосувати ESP32 / ESP8266. Саме тому ми не ставимо головний контролер на плату модуля GGreg20. Ми вважаємо, що користувач має право обирати контролер, платформу чи середовище розробки незалежно та самостійно. А наша задача &#8211; забезпечити якомога ширшу сумісність та універсальність нашого продукту.</p>



<p class="wp-block-paragraph">З електричної точки зору, оснащення пристроїв даної категорії інтерфейсом I2C переваг теж не має, адже живлення та інтерфейс передачі даних що у I2C-варіанті, що у варіанті з імпульсним виходом, як у GGreg20_V3, потребують однакової кількості сигнальних дротів у шлейфі. Гарячу заміну, яку підтримує шина I2C, для модулів даного типу теж важко назвати бажаною, вже не кажучи про обов’язковість наявності такої функції.</p>



<p class="wp-block-paragraph">На Рис. наводимо схематичні зображення двох модулів &#8211; поточної версії GGreg20 без I2C, та версії з інтерфейсом I2C, щоб показати, наскільки довелося б змінити модуль з урахуванням реальних розмірів (10х10 мм) додаткової мікросхеми вбудованого контролера-компаньйона.</p>



<figure class="wp-block-image size-large"><a href="https://iot-devices.com.ua/wp-content/uploads/2022/05/6-ggreg20_v3_publication_pic.png"><img loading="lazy" decoding="async" width="1024" height="566" src="https://iot-devices.com.ua/wp-content/uploads/2022/05/6-ggreg20_v3_publication_pic-1024x566.png" alt="GGreg20_V3" class="wp-image-2005" srcset="https://iot-devices.com.ua/wp-content/uploads/2022/05/6-ggreg20_v3_publication_pic-1024x566.png 1024w, https://iot-devices.com.ua/wp-content/uploads/2022/05/6-ggreg20_v3_publication_pic-300x166.png 300w, https://iot-devices.com.ua/wp-content/uploads/2022/05/6-ggreg20_v3_publication_pic-768x424.png 768w, https://iot-devices.com.ua/wp-content/uploads/2022/05/6-ggreg20_v3_publication_pic-1536x848.png 1536w, https://iot-devices.com.ua/wp-content/uploads/2022/05/6-ggreg20_v3_publication_pic-454x251.png 454w, https://iot-devices.com.ua/wp-content/uploads/2022/05/6-ggreg20_v3_publication_pic.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph"><em><br>Рис. Якби GGreg20_V3 мав інтерфейс I2C (червоним показано вбудований контролер-компаньйон, що забезпечує режим I2C Slave Device</em>)</p>



<p class="wp-block-paragraph">Єдиними перевагами для обґрунтування доцільності оснащення нашого модуля радіації інтерфейсом I2C є наступні:</p>



<ul class="wp-block-list"><li>можливість підключення декількох пристроїв на I2C-інтерфейс головного контролера;</li><li>розрахунок користувацьких значень засобами вбудованого контролера-компаньйона.</li></ul>



<p class="wp-block-paragraph">Але якщо ретельно зважити потенційні здобутки та цілком конкретні втрати від запровадження I2C у даному пристрої, стане очевидним, що для користувача краще мати універсальний модуль з широкою драйверною підтримкою і можливістю застосування у “ручному” режимі, ніж отримати купу переваг шини I2C, якими ще потрібно зуміти скористатися.</p>



<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><tbody><tr><td></td><td><strong>Інтерфейс I2C</strong>                         </td><td><strong>Інтерфейс лічильника імпульсів на порту вводу-виводу (GPIO pulse counter)</strong></td></tr><tr><td>Автономне використання в “ручному” режимі</td><td>Ні</td><td>Так</td></tr><tr><td>Потребує вбудований контролер &#8211; компаньйон</td><td>Так:&nbsp;<br>&#8211; вища вартість;<br>&#8211; більші розміри.</td><td>Ні</td></tr><tr><td>Драйверна підтримка</td><td>Відсутня / дуже обмежена</td><td>Найширша</td></tr><tr><td>Вимоги до апаратної обв’язки</td><td>Високі:<br>&#8211; головний контролер;<br>&#8211; дисплей.</td><td>Низькі / відсутні</td></tr><tr><td>Вимоги до кваліфікації користувача</td><td>Високі:<br>&#8211; програмування embed.;<br>&#8211; адміністрування/конфіг;<br>&#8211; інтерфейси/протоколи;<br>&#8211; електроніка/інтеграція.</td><td>Низькі / відсутні</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Додатково до вже викладеного вище наведемо дві ключові проблеми, котрі ми хотіли б окреслити для потенційних користувачів. Цих проблем немає в GGreg20_V3, але їх неодмінно матиме (у тих чи інших варіаціях) модуль вимірювання радіації з інтерфейсом I2C.</p>



<h2 class="wp-block-heading"><strong>Проблема #1</strong> Польові умови / Надзвичайна ситуація&nbsp;</h2>



<p class="wp-block-paragraph">Обдумайте таку ситуацію: у вас в шухляді лежить сенсор радіації і чекає, коли ж ви його нарешті почнете програмувати, а в наступний момент вам вже потрібно якнайшвидше покинути будинок з одним наплічником у руках і, можливо, мерщій починати вимірювати рівень радіації, бо настала ситуація природного чи техногенного лиха, і ви знаходитеся поруч з епіцентром таких подій.&nbsp;</p>



<p class="wp-block-paragraph">Ми в Україні дуже добре знаємо ці обставини і враховуємо накопичений у найважчі для країни часи досвід, щоб зробити системний дизайн наших продуктів якомога кращим.</p>



<p class="wp-block-paragraph">Наш модуль GGreg20_V3 достатньо лише заживити від павербанка (чи навіть кількох батарейок АА/ААА) чи сонячної панелі &#8211; і все: можна вручну проводити вимір за спалахами світлодіода та секундоміром чи власним відліком.&nbsp;</p>



<p class="wp-block-paragraph">Кількість спалахів за хвилину помножена на коефіцієнт перетворення &#8211; і є рівень радіації у mkSv/hour.&nbsp;</p>



<p class="wp-block-paragraph">Коефіцієнт перетворення для трубки SBM20 є рівним 0.0054. Таким чином маємо просту формулу:&nbsp;</p>



<p class="has-text-align-center wp-block-paragraph">CPM x 0.0054 = mkSv/hour.&nbsp;</p>



<p class="wp-block-paragraph">де CPM &#8211; кількість спалахів на хвилину (<em>Counts per Minute</em>).</p>



<p class="wp-block-paragraph">Для Києва [20 &#8211; 48] спалахів &#8211; це нормальний рівень (0.10 &#8211; 0.26 mkSv/h).</p>



<p class="wp-block-paragraph">На противагу GGreg20_V3, модуль з інтерфейсом I2C в польових умовах буде дуже складно використати за призначенням. Адже модуль також потребує наявності головного контролера, дисплея, засобів програмування, розробки програмного коду, та спеціальних знань і навичок, що дозволять взаємно підключити необхідні компоненти та запрограмувати їх. Це означає, що звичайний користувач без спеціальних знань не зможе провести вимірювання сенсором з інтерфейсом I2C, навіть якщо він, за гарним збігом обставин, матиме такий у своєму наборі доступних інструментів.</p>



<h2 class="wp-block-heading"><strong>Проблема #2</strong> Драйверна підтримка</h2>



<p class="wp-block-paragraph">Навіть якщо все гаразд з обстановкою, що оточує користувача, і модуль сенсора радіації експлуатується в умовах цивілізації, все одно з варіантом дизайну модуля, що має інтерфейс I2C є проблеми. Проблеми виникають у користувачів, які хочуть використовувати улюблені системи / платформи / середовища / архітектури розробки для IoT.&nbsp;</p>



<p class="wp-block-paragraph">Систем і смаків дуже багато, і навіть самі передові і популярні системи мають драйвери далеко не для всіх пристроїв, що зазвичай купують та намагаються підключити споживачі.&nbsp;</p>



<p class="wp-block-paragraph">Завдяки неоднорідності протоколів інтеграції іноді доводиться писати драйвер самостійно, або чекати кілька років, доки розробники системи звернуть увагу на цей конкретний комерційний пристрій і розроблять відповідний драйвер-конектор.</p>



<p class="wp-block-paragraph">Наведемо порівняльну таблицю поширених платформ з вбудованою підтримкою I2C сенсорів радіації та платформ з підтримкою лічильника імпульсів на GPIO, щоб читач міг осягнути масштаб цієї проблеми.</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Платформа</strong>         </td><td class="has-text-align-center" data-align="center"><strong>Модуль сенсора радіації з I2C, вбудована драйверна підтримка платформою</strong>      </td><td class="has-text-align-center" data-align="center"><strong>Модуль сенсора радіації З імпульсним виходом, вбудована драйверна підтримка (GPIO pulse counter, external ISR) платформою</strong></td></tr><tr><td>Arduino</td><td class="has-text-align-center" data-align="center">Ні</td><td class="has-text-align-center" data-align="center">Так</td></tr><tr><td>NodeMCU (Lua)</td><td class="has-text-align-center" data-align="center">Ні</td><td class="has-text-align-center" data-align="center">Так</td></tr><tr><td>MicroPython</td><td class="has-text-align-center" data-align="center">Ні</td><td class="has-text-align-center" data-align="center">Так</td></tr><tr><td>ESPHome / Home Assistant</td><td class="has-text-align-center" data-align="center">Ні</td><td class="has-text-align-center" data-align="center">Так</td></tr><tr><td>Espressif ESP-IDF</td><td class="has-text-align-center" data-align="center">Ні</td><td class="has-text-align-center" data-align="center">Так</td></tr><tr><td>STM32</td><td class="has-text-align-center" data-align="center">Ні</td><td class="has-text-align-center" data-align="center">Так</td></tr><tr><td>Tasmota</td><td class="has-text-align-center" data-align="center">Ні</td><td class="has-text-align-center" data-align="center">Так</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Ці дані дуже промовисто вказують, що сенсор з імпульсним виходом, такий як GGreg20_V3, набагато легше підключити до будь-якої платформи, або ж використовувати модуль взагалі автономно, за необхідності.&nbsp;</p>



<p class="wp-block-paragraph">Звісно, що кожен модуль з інтерфейсом I2C зазвичай має власні бібліотеки, розроблені виробником або небайдужими учасниками спільноти програмного забезпечення з відкритим вихідним кодом. Наприклад, модуль GGreg20_V3 має кілька таких бібліотек для популярних платформ:</p>



<figure class="wp-block-table is-style-stripes"><table><tbody><tr><td><strong>Platform</strong></td><td><strong>Link</strong></td></tr><tr><td>Arduino contributed library</td><td>https://www.arduino.cc/reference/en/libraries/ggreg20_v3/</td></tr><tr><td>ESPHome / Home Assistant example</td><td>https://github.com/iotdevicesdev/ggreg20-v3-homeassistant-esphome-example</td></tr><tr><td>Tasmota driver example</td><td>https://github.com/iotdevicesdev/ggreg20-v3-tasmota-esp32-driver</td></tr><tr><td>NodeMCU (Lua) example</td><td>https://github.com/iotdevicesdev/ggreg20-v3-nodemcu-lua-example</td></tr><tr><td>NodeMCU (Lua) full functional driver</td><td>https://alterstrategy.com/product/radcounter/</td></tr></tbody></table></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><em><strong>Примітка.</strong> Хоча кожна сучасна платформа для IoT, як правило, забезпечує підтримку шини I2C, також має бути наявним драйвер для кожного конкретного апаратного модуля (виробник, модель, версія). Підтримка має бути як на боці платформи, так і на боці головного контролера, до якого підключається модуль.</em></p></blockquote>



<p class="wp-block-paragraph">Наявність бібліотек, подібних до тих, що наведено у таблиці, вже добре. Але це не дає жодних гарантій, що ці бібліотеки підтримуються їх авторми та є актуальними, а також що користувач знайде таку бібліотеку саме до своєї улюбленої платформи і зможе її інтегрувати до неї і запрограмувати кінцевий пристрій.</p>



<p class="wp-block-paragraph">У випадку ж з лічильником імпульсів на GPIO абсолютно інша ситуація: усі платформи підтримують таку функцію і дуже просто програмуються.</p>



<h2 class="wp-block-heading"><strong>Замість висновків</strong></h2>



<p class="wp-block-paragraph">Попри очевидні переваги шини I2C, якщо ми і приймемо в майбутньому рішення додати підтримку I2C у модуль GGreg20, то це буде ще один, альтернативний пристрій з такими можливостями. А споживачі самі зможуть обирати, який з варіантів їм підходить найкраще.</p>



<p class="wp-block-paragraph">Купуйте детектор іонізуючої радіації <a href="https://iot-devices.com.ua/product-uk/ggreg20_v3-ionizing-radiation-detector-with-geiger-tube-sbm-20/">GGreg20_V3</a> з імпульсним виходом.</p>



<p class="wp-block-paragraph">Бажаємо успіхів!</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
