<?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>ESP12.OLED &#8211; IoT-devices, LLC &#8211; Electronics manufacturer for IoT</title>
	<atom:link href="https://iot-devices.com.ua/tag/esp12-oled/feed/" rel="self" type="application/rss+xml" />
	<link>https://iot-devices.com.ua</link>
	<description>Від модулів до складних пристроїв</description>
	<lastBuildDate>Sun, 07 Jan 2024 17:30:24 +0000</lastBuildDate>
	<language>uk</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</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>ESP12.OLED &#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>Термометр LM75: підключення  до ESP12.OLED_V1 у ESPHome</title>
		<link>https://iot-devices.com.ua/lm75-thermometer-connection-to-esp12-oled_v1-in-esphome/</link>
		
		<dc:creator><![CDATA[sah]]></dc:creator>
		<pubDate>Sun, 07 Jan 2024 11:21:20 +0000</pubDate>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Тестування]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[ESP12.OLED]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[ESPHome]]></category>
		<category><![CDATA[Home Assistant]]></category>
		<category><![CDATA[I2CHUB_V1]]></category>
		<category><![CDATA[LM75]]></category>
		<category><![CDATA[yaml]]></category>
		<guid isPermaLink="false">https://iot-devices.com.ua/?p=3223</guid>

					<description><![CDATA[Всі хто займається DIY IoT проектами знайомі з сенсором температури LM75. Термометр LM75 &#8211; це дешевий і зручний сенсор, який має достатню точність та діапазон вимірювання.&#160; Та найголовніша його перевага у тому, що він працює через I2C шину.&#160; Чому ці термометри є недооціненими Хтось може зауважити, що LM75 це не найкращий сенсор за своїми технологічними [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Всі хто займається DIY IoT проектами знайомі з сенсором температури LM75. Термометр LM75 &#8211; це дешевий і зручний сенсор, який має достатню точність та діапазон вимірювання.&nbsp;</p>



<p class="wp-block-paragraph">Та найголовніша його перевага у тому, що він працює через I2C шину.&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-us.googleusercontent.com/2IO_QsYCPegb15n4XkZZsZDiHSr8LHAXmo0eJKCdHTLIiyRERwwLw8AZLHsOyJnZ_85ciPBnnY23iEOM8HTMqSwMHFZrgcqfWqxqIV2IVVB4kx3fCC8g7F9LLwW0iX_haE7DYUq38NYbpO8Er0IQdGw" alt=""/></figure>



<h1 class="wp-block-heading">Чому ці термометри є недооціненими</h1>



<p class="wp-block-paragraph">Хтось може зауважити, що LM75 це не найкращий сенсор за своїми технологічними особливостями і виконанням у вигляді мікросхеми. І дійсно, є багато інших типів сенсорів температури, такі як <a href="https://esphome.io/components/sensor/dallas.html?highlight=wire#dallas-temperature-sensor" target="_blank" rel="noopener">1-Wire Dallas&nbsp; DS18b20</a>. Ці сенсори мають одно-провідне підключення та багато інших конструктивних переваг, таких як вологозахищені металізовані корпуси у вигляді капсули, тощо. На шину 1-Wire можливо підключити багато термометрів на одному дроті, 1Wire підтримує контроль помилок та ідентифікацію пристроїв, тощо, тощо.</p>



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



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



<ul class="wp-block-list"><li>Сенсор BME680 / BME280 I2C / SPI;</li><li>Сенсор DS18b20 1-Wire;</li><li>Дисплей SPI / I2C;</li><li>Сенсор блискавки AS3935 SPI / I2C;</li><li>Сенсор освітленості MAX44009 I2C;</li><li>Сенсор температури та вологості HDC1080 I2C;</li><li>Сенсор CCS811 I2C;</li><li>Сенсор SCD4X I2C;</li></ul>



<p class="wp-block-paragraph">І навіть в ситуації з потужним ESP32 (не кажучи про ESP8266 та подібні контролери, як-от Arduino чи RPI Pico W), ми будемо вимушені вирішувати задачу оптимізації кількості інтерфейсів та протоколів. Адже обробка кількох різних протоколів рано чи пізно вплине на нашу розробку і буде вимагати спрощення не лише на боці апаратного забезпечення (бюджет вільних портів вводу-виводу), а і програмної реалізації драйверів для різних протоколів та інтерфейсів, які мають крутитися паралельно в головному циклі контролера.</p>



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



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



<p class="wp-block-paragraph">Варто спробувати будувати оптимальне програмно-апаратне рішення &#8211; робимо крок у бік шини I2C. Тобто, оскільки у нас на головному контролері буде дисплей SSD1306 з I2C, кейпад <a href="https://iot-devices.com.ua/product-uk/i2cui4v1-user-interface-i2c-module-with-5keys-keypad-rgb-led-buzzer/">I2CUI4_V1</a> з I2C &#8211; навіщо нам ставити сенсори температури з якимось іншим інтерфейсом? &#8211; Так і вирішили, буде лише один інтерфейс: шина I2C. Всі з’єднання будуть через поділювач / хаб <a href="https://iot-devices.com.ua/product-uk/i2chub-v1-module-i2c-bus-interfaces-splitter/">I2CHUB_V1</a>, який підтримує підключення до контролера 5 пристроїв одночасно.</p>



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



<h1 class="wp-block-heading">Вбудовані у ESPHome драйвери</h1>



<p class="wp-block-paragraph">Втім, коли ми робимо пошук на сайті ESPHome, то виявляється, що сенсор LM75, який ми зібралися використати у проекті в якості термометрів, не підтримується &#8211; вбудованого драйвера немає.</p>



<p class="wp-block-paragraph">Починаємо проводити власне невелике розслідування щодо наявних драйверів у ESPHome для сенсорів температури подібних до LM75 (0.89 USD на Mouser). І виявляємо, що є два інші термометри, для яких вже написано вбудований драйвер у ESPHome:</p>



<ul class="wp-block-list"><li><a href="https://esphome.io/components/sensor/mcp9808" target="_blank" rel="noopener">MCP9808</a> (1.39 USD на Mouser)</li><li><a href="https://esphome.io/components/sensor/tmp1075" target="_blank" rel="noopener">TMP1075</a> (0.74 USD на Mouser)</li></ul>



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



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



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



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



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><em><strong>Примітка.</strong> Чесно кажучи, нам досі не зрозуміло, чому розробники та контрибутори ESPHome, досі не зробили вбудованого драйвера для LM75. Нам би не довелося писати цю публікацію і проводити купу часу за дивними експериментами.</em></p></blockquote>



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



<h1 class="wp-block-heading">Підключення драйвера ззовні</h1>



<p class="wp-block-paragraph">Як ви мабуть знаєте, в ESPHome є щонайменше два механізми підключення власних драйверів пристроїв ззовні: <a href="https://esphome.io/components/sensor/custom.html" target="_blank" rel="noopener">Custom Component</a> та <a href="https://esphome.io/components/external_components" target="_blank" rel="noopener">External Component</a>. </p>



<p class="wp-block-paragraph">Custom component наразі вважається застарілим варіантом інтеграції і не рекомендується документацією ESPHome до використання.&nbsp;</p>



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



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



<figure class="wp-block-image"><img decoding="async" src="https://lh7-us.googleusercontent.com/fhNnFHCjYoYeeW3YgVORrZe0q2lyXcUaa4xA8T0t9_3djudr-Oh-DGAgBgDhDNXycpoDgDG9s8-TOZv4eebVcJ_4TYSi3_V_7k1PN8ohzUPVyY3GptHfUwkf9InA6ttQ86HDp9OkrFDhmrSe6FOTOlc" alt=""/></figure>



<p class="wp-block-paragraph">Отже, щоб підключити External Component, спочатку потрібно правильно описати його обвязку. Ми не будемо тут занурюватися у деталі програмування та конфігурацій, адже ми знайшли на GitHub вже готовий компонент для LM75.</p>



<p class="wp-block-paragraph">Щоб додати сенсори LM75, у YAML-конфіг пристрою в ESPHome, потрібно додати лише кілька рядків:</p>



<ul class="wp-block-list"><li>підключити зовнішній компонент (External Component):</li></ul>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-us.googleusercontent.com/GiggLaW8SoWJlEFXlWf7k0F6WK3AhbYfrN4R9S5W1FnR0UnApOTweIlfQ8pNje9f1YZFrwnXBVIoWiidj9D1r-9eVaScu6LnZc6xZvGNTWcdagqLFWJJDIXOGLf37IgnxLXaHlJa5sfalcPoYj0NQ_g" alt=""/></figure>



<ul class="wp-block-list"><li>додати сутності сенсорів LM75</li></ul>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-us.googleusercontent.com/l7JbCPB76qDdLuZWnWDmjvXdPfJS0COrbhYlSTKwOD-kiEt7DxrkwiUMFcYOvfVGLgImvW9zC7h8X3J3ViYwVggYGbuqlPpwfuLTE8TPDJHVq1E67OW8PRd__e0lSMbPyPUV6RVn8_zN4vaUVps700A" alt=""/></figure>



<p class="wp-block-paragraph">Для зручності ми форкнули репозиторій esphome-lm75, який надано <a href="https://github.com/btomala" target="_blank" rel="noopener">https://github.com/btomala</a> на GitHub у свій акаунт <a href="https://github.com/iotdevicesdev/esphome-lm75" target="_blank" rel="noopener">https://github.com/iotdevicesdev/esphome-lm75</a></p>



<p class="wp-block-paragraph">Приклад, як виглядає підключення драйверів LM75 для контролера ESP12.OLED_V1 виробництва IoT-devices, LLC у ESPHome:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># YAML Config Example
esphome:
  name: esp12oled-lm75
  friendly_name: esp12oled-lm75
  comment: "Configuration example of two LM75 for ESP12.OLED_V1 with ESPHome firmware"
  project:
    name: "iot-devices.esp12oled-lm75"
    version: "1.0.0"


external_components:
  - source: github://iotdevicesdev/esphome-lm75
    components: [ lm75 ]


esp8266:
  board: nodemcuv2


logger:


api:
  encryption:
    key: "8tDDLc3S5dnSjADItGR5+7KxoUBhUIqeOiJZIXy"


ota:
  password: "c15e9a44e1408352d945b8cd35b79"


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password


  ap:
    ssid: "Test-Node Fallback Hotspot"
    password: "rtF1XxDZ9"


captive_portal:


i2c:
  sda: 4
  scl: 5
  id: i2c_bus


sensor:
  - platform: lm75
    id: temperature
    name: "LM75 temperature"
    update_interval: 30s
    address: 0x48


  - platform: lm75
    id: temperature2
    name: "LM75 temperature2"
    update_interval: 30s
    address: 0x49
# END YAML Config Example
</pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><em><strong>Примітка.</strong> Цей код також є на нашому GitHub: <a href="https://github.com/iotdevicesdev/ESP12.OLED_V1-LM75-ESPHome" target="_blank" rel="noopener">github.com/iotdevicesdev/ESP12.OLED_V1-LM75-ESPHome</a> </em></p></blockquote>



<h1 class="wp-block-heading">Склад проекту</h1>



<p class="wp-block-paragraph">1 x Модуль <a href="https://iot-devices.com.ua/en/product/esp12oled-universal-esp8266-mcuboard-oled-en/">ESP12.OLED_V1</a> з прошивкою ESPHome 2023.12.5;</p>



<p class="wp-block-paragraph">1 x Модуль <a href="https://iot-devices.com.ua/en/product/i2chub-v1-module-i2c-bus-interfaces-splitter/">I2CHUB_V1</a>;</p>



<p class="wp-block-paragraph">1 x Модуль LM75 (no brand);</p>



<p class="wp-block-paragraph">1 x Модуль CJMCU-75.</p>



<h1 class="wp-block-heading">Результати проекту</h1>



<p class="wp-block-paragraph">Головне, що ми хотіли вам розповісти у цьому тексті:</p>



<ol class="wp-block-list"><li>Ми підключили LM75 через механізм External Component настільки легко і просто, що самі не повірили у успіх після складних експериментів з драйвером для TMP1075.</li><li>Конфігурації підтягуються напряму з GitHub, або можуть лінкуватися з локального сховища на вашому ESPHome / HomeAssistant диску. Підключений таким чином External Component автоматично включається у прошивку під час її компіляції.</li><li>Ми перевірили, що з цим компонентом не виникає проблем з адресацією кількох сенсорів LM75 одночасно.</li><li>Все настільки ж просто, як підключити у ESPHome сенсор для якого є вбудований драйвер на кшталт BME280. Простота застосування готового компоненту через метод External Component не йде ні в яке порівняння з застосуванням застарілого методу Custom Component, який ми колись робили для інших своїх задач із сенсором ультрафіолету VEML6070.&nbsp;&nbsp;</li></ol>



<p class="wp-block-paragraph">Як можна бачити на наступних скріншотах, наш проект успішно виконано:</p>



<ul class="wp-block-list"><li>LM75 підключено до контролера ESP12.OLED_V1 з прошивкою ESPHome;</li><li>Два сенсори LM75 одночасно працюють з головним контролером. Там де працює два сенсори, може працювати і вісім (за потреби, LM75 має три піни конфігурації I2C адреси, що дозволяє одночасно працювати з вісьмома сенсорами на кожній шині I2C);</li><li>Дані з сенсорів потрапляють у Home Assistant та виводяться на Dashboard;</li><li>Далі значення сенсорів можуть або автономно виводитися на дисплей контролера ESP12.OLED_V1 засобами прошивки ESPHome, та/або можуть застосовуватися у сценаріях автоматизації Home Assistant.</li></ul>



<h2 class="wp-block-heading">Значення сенсорів LM75 на Dashboard сервера Home Assistant:</h2>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-us.googleusercontent.com/acaO4mGBATm3R6jzes0mGzzjmRyzUxaL-6iyqv6N8WU7OFE9OMSp491EVcjqcoUL2GHRmAxIZWZJD9XeAB4dOspKdLGxDZWCB3UIDyG3vkJV7-xwE7sH3eahGRzSWIz3SupGSo_-pjFTKhunHcEo9EI" alt=""/></figure>



<h2 class="wp-block-heading">Графіки з Logbook сервера Home Assistant:</h2>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-us.googleusercontent.com/ptCieHiX5fvP03Sls1EwV4lyliuggL_4NYJglhDjCkdg91jMyGi3wF-6hKYWzKgxDSWx8MRz1lAyHZNT9OI7g0krtebesXDgHHKJJUjNtEahWW_jL2xIx7jqzUDsyAudWB-GPFNB6tc6LTBZlw1dKKU" alt=""/></figure>



<h2 class="wp-block-heading">Значення сенсорів LM75 у меню Developer Tools сервера Home Assistant:</h2>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-us.googleusercontent.com/D6khohe5sku1MkzapvAicnvyQcwPRACHO-GXe5PQARDyUtOy0FIlymy-ood33FKdA-Amjys9B9mMLQ8hot69UCZd6449YPOR1PjAHGc6ICtuCZt51_j-XG7l9hJSPqvOvQ9b_0GwdtUWBTTEqpms8vQ" alt=""/></figure>



<h2 class="wp-block-heading">Скріншоти консолі ESPHome:</h2>



<ul class="wp-block-list"><li>Пристрої знайдено під час сканування шини I2C (дисплей і два термометри)</li></ul>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-us.googleusercontent.com/NJerrlBsGoKpzLNQ5Pbv-erEZkMrZNETE3dMAzkqdfoCPEukPqyjZ8Qb9c7Kpx4pNYH1HSO9vxPxJJkdm5mp-aGXt1DtQK4-MZklgLQOiRsd83zjYum4m9UeYDY4IcFsnflwP-mbxyCiokCRWt0bbVI" alt=""/></figure>



<ul class="wp-block-list"><li>Драйвери для сенсорів LM75 ініціалізовано</li></ul>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-us.googleusercontent.com/Y7ulzeeq0M9KBePJRl0vvtU-EVObTNn3n-RDIPB-lsAx9rVp_xdmsYoW5_bpZKXzwm08S5ZVoeTRvkq7NZiFMph-ojmhF2yqRL0wJe4d5-wZwFr8yaTsQp0LINUNUIZBo_niNpuNh_BNlyaAY6-ybKU" alt=""/></figure>



<ul class="wp-block-list"><li>Дані з сенсорів отримує ESPHome та передає у Home Assistant</li></ul>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-us.googleusercontent.com/pySE4l9JF_jNWySJ03bDw-1hr8PlL6w6rLtDvjQY6HAwzeB0JFCVAF_7vR5Ypxn7K6Ccm4zrnKLoQqJmCiKCKPPzzfuQFCAB9ouBUG_m2V_R4u7-QxvvxcnrxD9CnVZvCGSb4RvcW2_K9EpbD3tFrw8" alt=""/></figure>



<p class="wp-block-paragraph">Це наразі все, що ми запланували розповісти за цією темою.</p>



<p class="wp-block-paragraph">Дякуємо за увагу!</p>



<p class="wp-block-paragraph">Бажаємо успіхів!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>GGreg20_V3 та ESP12.OLED_V1 у проєкті фахівців КПІ</title>
		<link>https://iot-devices.com.ua/ggreg20_v3-esp12-oled_v1-kpi-project/</link>
		
		<dc:creator><![CDATA[sah]]></dc:creator>
		<pubDate>Wed, 16 Aug 2023 14:17:22 +0000</pubDate>
				<category><![CDATA[Новини]]></category>
		<category><![CDATA[ESP12.OLED]]></category>
		<category><![CDATA[GGreg20_V3]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[IoT-devices]]></category>
		<category><![CDATA[thingspeak]]></category>
		<guid isPermaLink="false">https://iot-devices.com.ua/?p=3052</guid>

					<description><![CDATA[Цікава робота фахівців Київського політехнічного інституту описує програмні методи аналізу потокових даних, зокрема, для аналізу радіаційного забруднення повітря: https://journals.kntu.kherson.ua/index.php/visnyk_kntu/article У проєкті використані наші модулі GGreg20_V3 та ESP12.OLED_V1 Проаналізовано відкриті дані показників радіаційного забруднення повітря у м. Києві та здійснено візуалізацію даних за допомогою аналітичних інструментів мови програмування Python.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Цікава робота фахівців Київського політехнічного інституту описує програмні методи аналізу потокових даних, зокрема, для аналізу радіаційного забруднення повітря:</p>



<p class="wp-block-paragraph"><a href="https://journals.kntu.kherson.ua/index.php/visnyk_kntu/user/setLocale/uk_UA?source=%2Findex.php%2Fvisnyk_kntu%2Farticle%2Fview%2F265" target="_blank" rel="noopener">https://journals.kntu.kherson.ua/index.php/visnyk_kntu/article</a></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> та <a href="https://iot-devices.com.ua/product-uk/esp12oled-universal-esp8266-mcuboard-oled/">ESP12.OLED_V1</a></p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><a href="https://iot-devices.com.ua/wp-content/uploads/2022/05/ggreg20-v3-sbm20-connectors-cables.jpg"><img fetchpriority="high" decoding="async" width="706" height="777" src="https://iot-devices.com.ua/wp-content/uploads/2022/05/ggreg20-v3-sbm20-connectors-cables.jpg" alt="GGreg20_V3 + SBM20 + Connectors (installed) + Cables" class="wp-image-1974" srcset="https://iot-devices.com.ua/wp-content/uploads/2022/05/ggreg20-v3-sbm20-connectors-cables.jpg 706w, https://iot-devices.com.ua/wp-content/uploads/2022/05/ggreg20-v3-sbm20-connectors-cables-273x300.jpg 273w, https://iot-devices.com.ua/wp-content/uploads/2022/05/ggreg20-v3-sbm20-connectors-cables-454x500.jpg 454w" sizes="(max-width: 706px) 100vw, 706px" /></a></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full is-resized"><a href="https://iot-devices.com.ua/wp-content/uploads/2020/06/esp12oled-c1-top-wide-1000-ver-min.jpg"><img decoding="async" src="https://iot-devices.com.ua/wp-content/uploads/2020/06/esp12oled-c1-top-wide-1000-ver-min.jpg" alt="Контролер на основі ESP8266-12F з дисплеєм OLED 0,96”" class="wp-image-692" width="330" height="449" srcset="https://iot-devices.com.ua/wp-content/uploads/2020/06/esp12oled-c1-top-wide-1000-ver-min.jpg 734w, https://iot-devices.com.ua/wp-content/uploads/2020/06/esp12oled-c1-top-wide-1000-ver-min-454x619.jpg 454w, https://iot-devices.com.ua/wp-content/uploads/2020/06/esp12oled-c1-top-wide-1000-ver-min-220x300.jpg 220w" sizes="(max-width: 330px) 100vw, 330px" /></a></figure>
</div>
</div>



<p class="wp-block-paragraph">Проаналізовано відкриті дані показників радіаційного забруднення повітря у м. Києві та здійснено візуалізацію даних за допомогою аналітичних інструментів мови програмування Python.</p>
]]></content:encoded>
					
		
		
			</item>
		<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[sah]]></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 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 loading="lazy" 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 loading="lazy" 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[sah]]></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[sah]]></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>Про наш модуль GGreg20_v3 пишуть у Twitter</title>
		<link>https://iot-devices.com.ua/ggreg20_v3-twitter/</link>
		
		<dc:creator><![CDATA[sah]]></dc:creator>
		<pubDate>Sun, 06 Nov 2022 20:10:55 +0000</pubDate>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Новини]]></category>
		<category><![CDATA[ESP12.OLED]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[ESPHome]]></category>
		<category><![CDATA[GGreg20_V3]]></category>
		<category><![CDATA[Home Assistant]]></category>
		<category><![CDATA[Twitter]]></category>
		<guid isPermaLink="false">https://iot-devices.com.ua/?p=2477</guid>

					<description><![CDATA[Наші клієнти розповіли про особливості використання модуля GGreg20_v3. Ми вдячні за високу оцінку:]]></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>. Ми вдячні за високу оцінку:</p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
https://twitter.com/sboger/status/1588745017497358336?s=20&#038;t=q6ngn3ruRvlof3YbRPChCg
</div></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6ad758bb2aacb&quot;}" data-wp-interactive="core/image" data-wp-key="6ad758bb2aacb" class="wp-block-image size-full wp-lightbox-container"><img loading="lazy" decoding="async" width="952" height="911" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://iot-devices.com.ua/wp-content/uploads/2022/11/twitter_sboger_GGreg20_V3_HA-ESPHome.png" alt="" class="wp-image-4312" srcset="https://iot-devices.com.ua/wp-content/uploads/2022/11/twitter_sboger_GGreg20_V3_HA-ESPHome.png 952w, https://iot-devices.com.ua/wp-content/uploads/2022/11/twitter_sboger_GGreg20_V3_HA-ESPHome-300x287.png 300w, https://iot-devices.com.ua/wp-content/uploads/2022/11/twitter_sboger_GGreg20_V3_HA-ESPHome-768x735.png 768w, https://iot-devices.com.ua/wp-content/uploads/2022/11/twitter_sboger_GGreg20_V3_HA-ESPHome-454x434.png 454w" sizes="(max-width: 952px) 100vw, 952px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
