<?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>MICRO &#8211; CONTROLLINO</title>
	<atom:link href="https://www.controllino.com/category/tutorials/micro/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.controllino.com</link>
	<description>Industrial PLCs &#124; 100% Arduino-compatible</description>
	<lastBuildDate>Wed, 11 Dec 2024 15:33:48 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://www.controllino.com/wp-content/uploads/2023/05/cropped-C_Logo_Filled_RGB-1-32x32.png</url>
	<title>MICRO &#8211; CONTROLLINO</title>
	<link>https://www.controllino.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Embbeded web to test Controllino MICRO features</title>
		<link>https://www.controllino.com/embbeded-web-to-test-controllino-micro-features/</link>
		
		<dc:creator><![CDATA[CONTROLLINO]]></dc:creator>
		<pubDate>Sat, 07 Dec 2024 01:02:43 +0000</pubDate>
				<category><![CDATA[MICRO]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://www.controllino.com/?p=17511</guid>

					<description><![CDATA[The project provides an easy to install tool to test the main features of the Controllino MICRO by serving an embedded web application directly from the device, easilly accesible from any web browser. Fast get started Download latest firmware Controllino MICRO RS485 .uf2 https://github.com/CONTROLLINO-PLC/micro_embedded_web/releases/download/global/web_micro_rs485.uf2 Controllino MICRO CAN .uf2 https://github.com/CONTROLLINO-PLC/micro_embedded_web/releases/download/global/web_micro_can.uf2   Upload firmware For easy installation [&#8230;]]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="17511" class="elementor elementor-17511" data-elementor-post-type="post">
									<section class="elementor-section elementor-top-section elementor-element elementor-element-2e392bfb elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="2e392bfb" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-765b8c54" data-id="765b8c54" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-359013ac elementor-widget__width-initial elementor-widget elementor-widget-text-editor" data-id="359013ac" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.15.0 - 20-08-2023 */
.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}</style>				<p>The project provides an easy to install tool to test the main features of the Controllino MICRO by serving an embedded web application directly from the device, easilly accesible from any web browser.</p>
<p><!-- /wp:paragraph --><!-- wp:image {"id":17512,"sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="1002" height="434" class="wp-image-17512" src="https://www.controllino.com/wp-content/uploads/2024/12/dashboard.png" alt="" srcset="https://www.controllino.com/wp-content/uploads/2024/12/dashboard.png 1002w, https://www.controllino.com/wp-content/uploads/2024/12/dashboard-300x130.png 300w, https://www.controllino.com/wp-content/uploads/2024/12/dashboard-768x333.png 768w" sizes="(max-width: 1002px) 100vw, 1002px" /></figure>
<h3><strong>Fast get started</strong></h3>
<p><!-- /wp:image --><!-- wp:quote --></p>
<blockquote class="wp-block-quote">
<p><!-- wp:heading {"level":3} --></p>
<p><!-- /wp:heading --></p>
</blockquote>
<p><!-- /wp:quote --><!-- wp:list --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><strong>Download latest firmware</strong></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --><!-- wp:list {"ordered":true} --></p>
<ol class="wp-block-list">
<li style="list-style-type: none;">
<ol class="wp-block-list"><!-- wp:list-item --></ol>
</li>
</ol>
<ol class="wp-block-list">
<li style="list-style-type: none;">
<ol class="wp-block-list">
<li>Controllino MICRO RS485 <strong>.uf2</strong> <a href="https://github.com/CONTROLLINO-PLC/micro_embedded_web/releases/download/global/web_micro_rs485.uf2">https://github.com/CONTROLLINO-PLC/micro_embedded_web/releases/download/global/web_micro_rs485.uf2</a></li>
<li>Controllino MICRO CAN <strong>.uf2</strong><a href=" https://github.com/CONTROLLINO-PLC/micro_embedded_web/releases/download/global/web_micro_can.uf2"> https://github.com/CONTROLLINO-PLC/micro_embedded_web/releases/download/global/web_micro_can.uf2</a></li>
</ol>
</li>
</ol>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ol class="wp-block-list">
<li style="list-style-type: none;"> </li>
</ol>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --><!-- wp:list --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><strong>Upload firmware</strong></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --><!-- wp:paragraph --></p>
<p>For easy installation first it is necessary to put the device in bootloader mode, to do this:</p>
<p><!-- /wp:paragraph --><!-- wp:list {"ordered":true} --></p>
<ol class="wp-block-list">
<li style="list-style-type: none;">
<ol class="wp-block-list"><!-- wp:list-item --></ol>
</li>
</ol>
<ol class="wp-block-list">
<li style="list-style-type: none;">
<ol class="wp-block-list">
<li>First method: Without external power press the boot button while connecting the USB cable, and then release the button.</li>
<li>Second method: Press both boot and reset buttons at the same time, then release the reset button and finally release the boot button.</li>
</ol>
</li>
</ol>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ol class="wp-block-list">
<li style="list-style-type: none;"> </li>
</ol>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --><!-- wp:paragraph --></p>
<p>The board will appear as a mass storage device, copy then the <strong>.uf2</strong> file to the device, it will reboot and start the web server</p>
<p><!-- /wp:paragraph --><!-- wp:list --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><strong>Connect to the web server</strong></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --><!-- wp:paragraph --></p>
<p>The default IP address is <strong>10.22.1.184</strong> and the default user and password are <strong>admin</strong> and <strong>admin</strong> respectively so just open a browser and go to <a href="http://10.22.1.184/">http://10.22.1.184/</a> to access the web server. Enjoy!</p>
<p><!-- /wp:paragraph --><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">OTA(Over Ethernet) Firmware update</h3>
<p><!-- /wp:heading --><!-- wp:gallery {"linkTo":"none"} --></p>
<figure class="wp-block-gallery has-nested-images columns-default is-cropped"><!-- wp:image {"id":17513,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img decoding="async" class="wp-image-17513  alignnone" src="https://www.controllino.com/wp-content/uploads/2024/12/firmware_update.png" alt="" width="449" height="143" srcset="https://www.controllino.com/wp-content/uploads/2024/12/firmware_update.png 1022w, https://www.controllino.com/wp-content/uploads/2024/12/firmware_update-300x95.png 300w, https://www.controllino.com/wp-content/uploads/2024/12/firmware_update-768x244.png 768w" sizes="(max-width: 449px) 100vw, 449px" /></figure>
<p><!-- /wp:image --></p>
</figure>
<p><!-- /wp:gallery --><!-- wp:paragraph --></p>
<p> </p>
<p>In the tap <strong>FIRMWARE UPDATE</strong> you can update the firmware using the OTA feature.</p>
<p><!-- /wp:paragraph --><!-- wp:list {"ordered":true} --></p>
<ol class="wp-block-list">
<li style="list-style-type: none;">
<ol class="wp-block-list"><!-- wp:list-item --></ol>
</li>
</ol>
<ol class="wp-block-list">
<li style="list-style-type: none;">
<ol class="wp-block-list">
<li>The firmware update process begin by uploading a new .bin firmware file on <strong>UPLOAD NEW FIRMWARE: CHOOSE .BIN FILE</strong> button, after uploaded the status of this current firmware will be <strong>MG_OTA_UNCOMMITTED</strong>.</li>
<li>To mark the uploaded firmware to be applied in the next reboot <strong>COMMIT THIS FIRMWARE</strong> button must be pressed, the status will change to <strong>MG_OTA_COMMITTED</strong>.</li>
<li>After the next reboot for example by pressing the <strong>REBOOT DEVICE</strong> button the firmware will be updated and the status will change to <strong>MG_OTA_FIRST_BOOT</strong>.</li>
<li>On the next reboot the current firmware will be saved as previous firmware with the status <strong>MG_OTA_COMMITTED</strong> and the current firmware info will be reseted. At any point you can come back to this old firmware by pressing the <strong>ROLLBACK TO THIS FIRMWARE</strong> button, except if a new firmware goes through all the process.</li>
<li>When pressing the <strong>ROLLBACK TO THIS FIRMWARE</strong> button the board will reboot and apply the previous firmware kepping previous firmware info.</li>
</ol>
</li>
</ol>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ol class="wp-block-list">
<li style="list-style-type: none;"> </li>
</ol>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ol class="wp-block-list">
<li style="list-style-type: none;"> </li>
</ol>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ol class="wp-block-list">
<li style="list-style-type: none;"> </li>
</ol>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ol class="wp-block-list">
<li style="list-style-type: none;"> </li>
</ol>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --><!-- wp:paragraph --></p>
<p><strong>Here there are some .bin files to test the OTA feature:</strong></p>
<p><!-- /wp:paragraph --><!-- wp:list --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>Controllino MICRO RS485:<!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>User led blink 1s <a href="https://github.com/CONTROLLINO-PLC/micro_embedded_web/releases/download/global/web_micro_rs485_blink_1s.bin">https://github.com/CONTROLLINO-PLC/micro_embedded_web/releases/download/global/web_micro_rs485_blink_1s.bin</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>Normal no user led blink <a href="https://github.com/CONTROLLINO-PLC/micro_embedded_web/releases/download/global/web_micro_rs485.bin">https://github.com/CONTROLLINO-PLC/micro_embedded_web/releases/download/global/web_micro_rs485.bin</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>Controllino MICRO CAN:<!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>User led blink 1s <a href="https://github.com/CONTROLLINO-PLC/micro_embedded_web/releases/download/global/web_micro_can_blink_1s.bin">https://github.com/CONTROLLINO-PLC/micro_embedded_web/releases/download/global/web_micro_can_blink_1s.bin</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>Normal no user led blink <a href="https://github.com/CONTROLLINO-PLC/micro_embedded_web/releases/download/global/web_micro_can.bin">https://github.com/CONTROLLINO-PLC/micro_embedded_web/releases/download/global/web_micro_can.bin</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Tools and technologies used</h3>
<p><!-- /wp:heading --><!-- wp:list --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>PlatformIO to manage the project and build the firmware.</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>Mongoose web server as core to genrate the web server app.</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>React js to develop the web app.</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Internal and external dependencies description</h3>
<p><!-- /wp:heading --><!-- wp:list --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>From <a href="https://github.com/CONTROLLINO-PLC/controllino_rp2040_firmware">controllino_rp2040_firmmware</a><!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>SPI library <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/lib/SPI">lib/SPI</a> until internal the SPI code for the internal MICRO components works good with the new SPI library version on Arduino-Pico.</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>CAN modified version of Arduino CAN library (MCP2515) <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/lib/arduino_can">lib/arduino_can</a> original library <a href="https://github.com/sandeepmistry/arduino-CAN">here</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>Controllino MICRO variant firmware <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/lib/controllino_micro">lib/controllino_micro</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>From Arduino-Pico <a href="https://github.com/earlephilhower/arduino-pico">https://github.com/earlephilhower/arduino-pico</a> OTA related libraries<!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>LittleFS <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/lib/LittleFS">lib/LittleFS</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>PicoOTA <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/lib/PicoOTA">lib/PicoOTA</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>Updater <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/lib/Updater">lib/Updater</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>MD5Builder <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/lib/MD5Builder">lib/MD5Builder</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>Mongoose OTA and device port for Arduino-Pico <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/lib/mongoose_arduino_pico">lib/mongoose_arduino_pico</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>Mongoose web server application <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/lib/webapp">lib/webapp</a> based on device dashboard example</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>External dependencies installed with PlatformIO see <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/platformio.ini">platformio.ini</a><!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>ArduinoJson</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>ArduinoRS485</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Web development project</h3>
<p><!-- /wp:heading --><!-- wp:paragraph --></p>
<p>Developed on react js uses also gulp to automate some parts of the build process, trying to generate the minimal weight app to embed in the microcontroller.</p>
<p><!-- /wp:paragraph --><!-- wp:paragraph --></p>
<p>On PlatformIO build <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/build_web.py">build_web.py</a> script is executed to build the web app into <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/lib/webapp/packed_fs.c">lib/webapp/packed_fs.c</a> source file that later is compiled with the firmware.</p>
<p><!-- /wp:paragraph --><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Requirements</h3>
<p><!-- /wp:heading --><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --><!-- wp:list --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>node v18.x.x</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>npm v8.x.x</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>react v18.x.x</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>Python 3.x.x</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Manual setup for web development</h3>
<p><!-- /wp:heading --><!-- wp:kevinbatdorf/code-block-pro {"code":"cd webdev","codeHTML":"\u003cpre class=\u0022shiki nord\u0022 style=\u0022background-color: #2e3440ff\u0022 tabindex=\u00220\u0022\u003e\u003ccode\u003e\u003cspan class=\u0022line\u0022\u003e\u003cspan style=\u0022color: #D8DEE9\u0022\u003ecd\u003c/span\u003e\u003cspan style=\u0022color: #D8DEE9FF\u0022\u003e \u003c/span\u003e\u003cspan style=\u0022color: #D8DEE9\u0022\u003ewebdev\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e","language":"javascript","theme":"nord","bgColor":"#2e3440ff","textColor":"#d8dee9ff","fontSize":".875rem","fontFamily":"Code-Pro-JetBrains-Mono","lineHeight":"1.25rem","clampFonts":false,"lineNumbers":false,"headerType":"headlights","disablePadding":false,"footerType":"none","seeMoreType":"","seeMoreString":"","seeMoreTransition":false,"highlightingHover":false,"lineHighlightColor":"rgba(201, 218, 248, 0.2)","copyButton":true,"copyButtonType":"heroicons","useTabs":false} --></p>
<div class="wp-block-kevinbatdorf-code-block-pro" style="font-size: .875rem; font-family: Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace; line-height: 1.25rem; --cbp-tab-width: 2; tab-size: var(--cbp-tab-width, 2);" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono">
<pre class="shiki nord" style="background-color: #2e3440ff;" tabindex="0"><code><span class="line"><span style="color: #d8dee9;">cd</span> <span style="color: #d8dee9;">webdev</span></span></code></pre>
</div>
<p><!-- /wp:kevinbatdorf/code-block-pro --><!-- wp:kevinbatdorf/code-block-pro {"code":"npm install","codeHTML":"\u003cpre class=\u0022shiki nord\u0022 style=\u0022background-color: #2e3440ff\u0022 tabindex=\u00220\u0022\u003e\u003ccode\u003e\u003cspan class=\u0022line\u0022\u003e\u003cspan style=\u0022color: #D8DEE9\u0022\u003enpm\u003c/span\u003e\u003cspan style=\u0022color: #D8DEE9FF\u0022\u003e \u003c/span\u003e\u003cspan style=\u0022color: #D8DEE9\u0022\u003einstall\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e","language":"javascript","theme":"nord","bgColor":"#2e3440ff","textColor":"#d8dee9ff","fontSize":".875rem","fontFamily":"Code-Pro-JetBrains-Mono","lineHeight":"1.25rem","clampFonts":false,"lineNumbers":false,"headerType":"headlights","disablePadding":false,"footerType":"none","seeMoreType":"","seeMoreString":"","seeMoreTransition":false,"highlightingHover":false,"lineHighlightColor":"rgba(201, 218, 248, 0.2)","copyButton":true,"copyButtonType":"heroicons","useTabs":false} --></p>
<div class="wp-block-kevinbatdorf-code-block-pro" style="font-size: .875rem; font-family: Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace; line-height: 1.25rem; --cbp-tab-width: 2; tab-size: var(--cbp-tab-width, 2);" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono">
<pre class="shiki nord" style="background-color: #2e3440ff;" tabindex="0"><code><span class="line"><span style="color: #d8dee9;">npm</span> <span style="color: #d8dee9;">install</span></span></code></pre>
</div>
<p><!-- /wp:kevinbatdorf/code-block-pro --><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Start development server</h3>
<p><!-- /wp:heading --><!-- wp:kevinbatdorf/code-block-pro {"code":"npm run dev","codeHTML":"\u003cpre class=\u0022shiki nord\u0022 style=\u0022background-color: #2e3440ff\u0022 tabindex=\u00220\u0022\u003e\u003ccode\u003e\u003cspan class=\u0022line\u0022\u003e\u003cspan style=\u0022color: #D8DEE9\u0022\u003enpm\u003c/span\u003e\u003cspan style=\u0022color: #D8DEE9FF\u0022\u003e \u003c/span\u003e\u003cspan style=\u0022color: #D8DEE9\u0022\u003erun\u003c/span\u003e\u003cspan style=\u0022color: #D8DEE9FF\u0022\u003e \u003c/span\u003e\u003cspan style=\u0022color: #D8DEE9\u0022\u003edev\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e","language":"javascript","theme":"nord","bgColor":"#2e3440ff","textColor":"#d8dee9ff","fontSize":".875rem","fontFamily":"Code-Pro-JetBrains-Mono","lineHeight":"1.25rem","clampFonts":false,"lineNumbers":false,"headerType":"headlights","disablePadding":false,"footerType":"none","seeMoreType":"","seeMoreString":"","seeMoreTransition":false,"highlightingHover":false,"lineHighlightColor":"rgba(201, 218, 248, 0.2)","copyButton":true,"copyButtonType":"heroicons","useTabs":false} --></p>
<div class="wp-block-kevinbatdorf-code-block-pro" style="font-size: .875rem; font-family: Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace; line-height: 1.25rem; --cbp-tab-width: 2; tab-size: var(--cbp-tab-width, 2);" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono">
<pre class="shiki nord" style="background-color: #2e3440ff;" tabindex="0"><code><span class="line"><span style="color: #d8dee9;">npm</span> <span style="color: #d8dee9;">run</span> <span style="color: #d8dee9;">dev</span></span></code></pre>
</div>
<p><!-- /wp:kevinbatdorf/code-block-pro --><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">React project description</h3>
<p><!-- /wp:heading --><!-- wp:list --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><strong>Login<!-- wp:list --></strong><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>Description: Component to get access to the dashboard using user credentials.</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>ubication: <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/webdev/src/components/Login.jsx">webdev/src/components/Login.jsx</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>used in:<!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>App</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><strong>Home<!-- wp:list --></strong><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>description: Display all main screen components</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>ubication: <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/webdev/src/components/Home.jsx">webdev/src/components/Home.jsx</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>used in:<!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>App</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><strong>Navbar<!-- wp:list --></strong><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>description: Header of the web app and render some features as logout</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>ubication: <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/webdev/src/components/Navbar.jsx">webdev/src/components/Navbar.jsx</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>used in:<!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>Home</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><strong>FormComms<!-- wp:list --></strong><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>description: Form to manage the network configuration</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>ubication: <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/webdev/src/components/FormComms.jsx">webdev/src/components/FormComms.jsx</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>used in:<!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>Home</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><strong>FormBoard<!-- wp:list --></strong><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>description: Main form to manage the board</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>ubication: <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/webdev/src/components/FormBoard.jsx">webdev/src/components/FormBoard.jsx</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>used in:<!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>Home</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><strong>Inputs, Outputs and ComComponent</strong><!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>description: Actuate and configure inputs, outputs and serial comunications</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>ubication:<!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/webdev/src/components/comComponen.jsx">webdev/src/components/comComponen.jsx</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/webdev/src/components/Inputs.jsx">webdev/src/components/Inputs.jsx</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/webdev/src/components/Outputs.jsx">webdev/src/components/Outputs.jsx</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>used in:<!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>FormBoard</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><strong>ItemContainer<!-- wp:list --></strong><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>description: Container to display inputs, outputs and serial comunications</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>ubication: <a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/webdev/src/components/ItemContainer.jsx">webdev/src/components/ItemContainer.jsx</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>used in:<!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>Inputs</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>Outputs</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>ComComponent</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><strong>LedInput, LedOutput and NetworkLeds</strong><!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>description: Component to visually display network activity and digital states of inputs and outputs</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>ubication:<!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/webdev/src/components/LedInputs.jsx">webdev/src/components/LedInputs.jsx</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/webdev/src/components/LedOutput.jsx">webdev/src/components/LedOutput.jsx</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/webdev/src/components/networkLeds.jsx">webdev/src/components/networkLeds.jsx</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>used in:<!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>FormBoard</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><strong>TmcuCard, TsensorCard and VsupplyCard</strong><!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>description: Card like component to monitor certain internal variables</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>ubication:<!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/webdev/src/components/TmcuCard.jsx">webdev/src/components/TmcuCard.jsx</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/webdev/src/components/TsensorCard.jsx">webdev/src/components/TsensorCard.jsx</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li><a href="https://github.com/CONTROLLINO-PLC/controllino_micro_embedded_web/blob/master/webdev/src/components/VsuplyCard.jsx">webdev/src/components/VsupplyCard.jsx</a></li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --><!-- wp:list-item --></p>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>used in:<!-- wp:list --><br />
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list"><!-- wp:list-item --></ul>
</li>
</ul>
<ul class="wp-block-list">
<li style="list-style-type: none;">
<ul class="wp-block-list">
<li>Home</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --></p>
</li>
</ul>
</li>
</ul>
<h3> </h3>
<h3 class="wp-block-heading">Conclusions</h3>
<p class="p3">1.<b>Ease of Use and Installation</b><b></b></p>
<p class="p4">This project offers a simple and quick approach to testing the functionalities of the Controllino MICRO through an embedded web server accessible from any browser, eliminating the need for complex configurations or external tools.</p>
<p class="p3">2.<b>Intuitive OTA Updates</b><b></b></p>
<p class="p4">The implementation of the OTA firmware update system ensures an efficient workflow for keeping the device up to date, allowing testing, rollback, and management of firmware versions in a reliable and user-friendly manner.</p>
<p class="p3">3.<b>Integration of Modern Tools</b><b></b></p>
<p class="p4">Combining technologies such as PlatformIO, React, and Mongoose demonstrates a commitment to modern and efficient development, ensuring optimal performance for both the firmware and the web application.</p>
<p class="p3">4.<b>Flexibility and Customization</b><b></b></p>
<p class="p4">Thanks to the modular structure of the project, developers can customize both the firmware and the web application according to their specific needs, using well-organized and documented components.</p>
<p class="p3">5.<b>Contribution to the Open-Source Community</b><b></b></p>
<p class="p4">By leveraging open-source dependencies and providing clear documentation, this project fosters collaboration and learning within the community, making it accessible and extensible for other developers.</p>
<p class="p3">6.<b>Solid Foundation for Future Developments</b><b></b></p>
<p class="p4">This project not only meets current needs for testing and configuring the Controllino MICRO but also lays a scalable foundation to integrate additional functionalities and extend its capabilities in the future.</p>
<p class="p3">7.<b>Educational and Professional Benefits</b><b></b></p>
<p class="p4">Combining hardware and software in this project makes it a valuable tool for both enthusiasts and professionals, facilitating understanding and experimentation with modern embedded technologies.</p>
<p> </p>
<p><!-- /wp:list-item --></p>
<p><!-- /wp:list --><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>						</div>
				</div>
					</div>
		</div>
							</div>
		</section>
							</div>
		]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>OpenPLC Light Intensity Control</title>
		<link>https://www.controllino.com/pwm-light-intensity-control-system-tutorial/</link>
		
		<dc:creator><![CDATA[CONTROLLINO]]></dc:creator>
		<pubDate>Sat, 30 Nov 2024 22:40:52 +0000</pubDate>
				<category><![CDATA[MAXI]]></category>
		<category><![CDATA[MEGA]]></category>
		<category><![CDATA[MICRO]]></category>
		<category><![CDATA[MINI]]></category>
		<category><![CDATA[OpenPLC]]></category>
		<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://www.controllino.com/?p=17457</guid>

					<description><![CDATA[Introduction This tutorial explains how to create a PWM-based light intensity control system using OpenPLC software and a CONTROLLINO Micro PLC. The system adjusts the brightness of a light through a single push button, using a digital output. Each button press decreases the brightness until it cycles back to full intensity. This project showcases ladder [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">Introduction</h1>



<p class="wp-block-paragraph">This tutorial explains how to create a PWM-based light intensity control system using OpenPLC software and a CONTROLLINO Micro PLC. The system adjusts the brightness of a light through a single push button, using a digital output. Each button press decreases the brightness until it cycles back to full intensity. This project showcases ladder logic programming to control light intensity using PWM.</p>



<h2 class="wp-block-heading">Prerequisites</h2>



<p class="wp-block-paragraph">Before you begin, ensure you have the following:</p>



<ul class="wp-block-list">
<li>OpenPLC software installed.</li>



<li>A CONTROLLINO Micro PLC.</li>



<li>Basic knowledge of ladder logic and PWM.</li>



<li>Hardware setup ready, including a connected push button and light output.</li>
</ul>



<h2 class="wp-block-heading">Step-by-Step Guide</h2>



<h3 class="wp-block-heading">Step 1: Install and Configure OpenPLC</h3>



<ol class="wp-block-list">
<li>Download OpenPLC from the official <a href="https://www.openplcproject.com/">OpenPLC website</a>.</li>



<li>Install the software on your computer.</li>



<li>Open the OpenPLC Editor and configure the environment for your CONTROLLINO Micro PLC:</li>
</ol>



<ul class="wp-block-list">
<li>Navigate to <strong>Settings &gt; Device</strong> and select &#8220;CONTROLLINO Micro&#8221; from the list.</li>



<li>Ensure the correct COM port is selected.</li>
</ul>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://github.com/CONTROLLINO-PLC/OpenPLC_examples/tree/master">Controllino&#8217;s OpenPLC repository</a></div>
</div>



<h3 class="wp-block-heading">Step 2: Create the Ladder Logic Program</h3>



<ol class="wp-block-list">
<li><strong>Define Variables</strong>:<br>Open the OpenPLC editor and define the variables listed below: Name Type Description <code>Control_button</code> BOOL Push button input to control brightness cycling. <code>Light_output</code> BOOL PWM output controlling the light intensity. <code>Light_bright</code> INT Tracks the current brightness level. <code>Pulse_regulator</code> TIME Timing variable for PWM modulation. <code>Light_on_state</code> BOOL Indicates whether the light is currently on. <code>Reset_state</code> BOOL Resets the brightness level to maximum. <code>Flag_cicle</code> BOOL Controls PWM signal cycling. <code>Full_bright</code> BOOL Indicates the full brightness state.</li>
</ol>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="370" src="https://www.controllino.com/wp-content/uploads/2024/11/OpemPLC-Variables-1024x370.jpg" alt="" class="wp-image-17498" srcset="https://www.controllino.com/wp-content/uploads/2024/11/OpemPLC-Variables-1024x370.jpg 1024w, https://www.controllino.com/wp-content/uploads/2024/11/OpemPLC-Variables-300x108.jpg 300w, https://www.controllino.com/wp-content/uploads/2024/11/OpemPLC-Variables-768x277.jpg 768w, https://www.controllino.com/wp-content/uploads/2024/11/OpemPLC-Variables-1536x554.jpg 1536w, https://www.controllino.com/wp-content/uploads/2024/11/OpemPLC-Variables-1200x433.jpg 1200w, https://www.controllino.com/wp-content/uploads/2024/11/OpemPLC-Variables.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ol class="wp-block-list">
<li><strong>Draw the Ladder Diagram</strong>:</li>
</ol>



<ul class="wp-block-list">
<li>Implement the logic as described in the <strong>Ladder Logic Explanation</strong> section below.</li>



<li>Use counters (CTU), timers (TP and TOF), and comparators (EQ, GT) to create the control logic.</li>
</ul>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://github.com/CONTROLLINO-PLC/OpenPLC_examples/tree/master/Dimmer_light_control">Download OpenPLC project here</a></div>
</div>



<h3 class="wp-block-heading">Step 3: Understanding the Ladder Logic</h3>



<h4 class="wp-block-heading">Button Press and Brightness Cycling</h4>



<ol class="wp-block-list">
<li><strong>Counter (CTU0)</strong>:</li>
</ol>



<ul class="wp-block-list">
<li>Each button press increments the counter.</li>



<li>The counter cycles through brightness levels (0, 1, 2, 3) and resets to 0 after reaching the maximum level.</li>
</ul>



<ol class="wp-block-list">
<li><strong>Brightness Level Comparison</strong>:</li>
</ol>



<ul class="wp-block-list">
<li>Use comparators to determine the brightness level (<code>Light_bright</code>) and adjust the PWM pulse width accordingly.</li>
</ul>



<ol class="wp-block-list">
<li><strong>PWM Signal Generation</strong>:</li>
</ol>



<ul class="wp-block-list">
<li>Use timers to control the on/off duration of the PWM signal based on the current brightness level.</li>
</ul>



<ol class="wp-block-list">
<li><strong>Light Output Control</strong>:</li>
</ol>



<ul class="wp-block-list">
<li>The variable <code>Pulse_regulator</code> adjusts the <code>Light_output</code> signal to modulate light intensity.</li>
</ul>



<h3 class="wp-block-heading">Step 4: Connect the Hardware</h3>



<ol class="wp-block-list">
<li><strong>Wiring</strong>:</li>
</ol>



<ul class="wp-block-list">
<li>Connect the push button to a digital input pin (e.g., <code>CONTROLLINO_D0</code>).</li>



<li>Connect the light output to a PWM-capable pin (e.g., <code>CONTROLLINO_Q0</code>).</li>
</ul>



<ol class="wp-block-list">
<li><strong>Pin Mapping</strong>:</li>
</ol>



<ul class="wp-block-list">
<li>Assign the <code>Control_button</code> variable to the input pin connected to the push button.</li>



<li>Assign the <code>Light_output</code> variable to the output pin connected to the light.</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" src="https://www.controllino.com/wp-content/uploads/2024/11/Electric-diagram-1-1024x768.png" alt="" class="wp-image-17495" srcset="https://www.controllino.com/wp-content/uploads/2024/11/Electric-diagram-1-1024x768.png 1024w, https://www.controllino.com/wp-content/uploads/2024/11/Electric-diagram-1-300x225.png 300w, https://www.controllino.com/wp-content/uploads/2024/11/Electric-diagram-1-768x576.png 768w, https://www.controllino.com/wp-content/uploads/2024/11/Electric-diagram-1-1536x1152.png 1536w, https://www.controllino.com/wp-content/uploads/2024/11/Electric-diagram-1-1200x900.png 1200w, https://www.controllino.com/wp-content/uploads/2024/11/Electric-diagram-1.png 1630w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">Step 5: Load and Run the Program</h3>



<ol class="wp-block-list">
<li><strong>Upload the Program</strong>:</li>
</ol>



<ul class="wp-block-list">
<li>Save your ladder logic project.</li>



<li>Use the OpenPLC Editor to upload the program to your CONTROLLINO Micro.</li>
</ul>



<ol class="wp-block-list">
<li><strong>Test the System</strong>:</li>
</ol>



<ul class="wp-block-list">
<li>Power on the CONTROLLINO Micro.</li>



<li>Press the push button and observe the light cycling through brightness levels.</li>
</ul>



<h3 class="wp-block-heading">Ladder Logic Explanation (Detailed)</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="819" src="https://www.controllino.com/wp-content/uploads/2024/11/OplenPLC-Program-1-1024x819.jpg" alt="" class="wp-image-17496" srcset="https://www.controllino.com/wp-content/uploads/2024/11/OplenPLC-Program-1-1024x819.jpg 1024w, https://www.controllino.com/wp-content/uploads/2024/11/OplenPLC-Program-1-300x240.jpg 300w, https://www.controllino.com/wp-content/uploads/2024/11/OplenPLC-Program-1-768x614.jpg 768w, https://www.controllino.com/wp-content/uploads/2024/11/OplenPLC-Program-1-1200x960.jpg 1200w, https://www.controllino.com/wp-content/uploads/2024/11/OplenPLC-Program-1.jpg 1358w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>Counter (CTU0)</strong>:</p>



<ol class="wp-block-list">
<li></li>
</ol>



<ul class="wp-block-list">
<li>Tracks the number of button presses and increments the <code>Light_bright</code> variable.</li>



<li>Resets to 0 after reaching the maximum brightness level.</li>
</ul>



<p class="wp-block-paragraph"><strong>Reset and Cycling</strong>:</p>



<ul class="wp-block-list">
<li>When the brightness reaches the lowest level, the <code>Reset_state</code> variable resets the system to the maximum brightness level.</li>
</ul>



<p class="wp-block-paragraph"><strong>Brightness Control</strong>:</p>



<ol class="wp-block-list">
<li></li>
</ol>



<ul class="wp-block-list">
<li>Use comparators (<code>EQ</code>, <code>GT</code>) to map the brightness level to a PWM duty cycle.</li>



<li>Timers (<code>TP0</code>, <code>TOF0</code>) generate the PWM signal by controlling the on/off duration of <code>Light_output</code>.</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="474" src="https://www.controllino.com/wp-content/uploads/2024/11/OplenPLC-Program-2-1024x474.png" alt="" class="wp-image-17497" srcset="https://www.controllino.com/wp-content/uploads/2024/11/OplenPLC-Program-2-1024x474.png 1024w, https://www.controllino.com/wp-content/uploads/2024/11/OplenPLC-Program-2-300x139.png 300w, https://www.controllino.com/wp-content/uploads/2024/11/OplenPLC-Program-2-768x355.png 768w, https://www.controllino.com/wp-content/uploads/2024/11/OplenPLC-Program-2-1200x555.png 1200w, https://www.controllino.com/wp-content/uploads/2024/11/OplenPLC-Program-2.png 1344w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">Troubleshooting</h3>



<ol class="wp-block-list">
<li>Verify the wiring between the push button, light, and CONTROLLINO.</li>



<li>Ensure that the correct input and output pins are assigned to the variables.</li>



<li>Check for errors in the ladder logic program using the OpenPLC debugger.</li>
</ol>



<h3 class="wp-block-heading">Conclusion</h3>



<p class="wp-block-paragraph">You have successfully implemented a PWM-based light intensity control system using a CONTROLLINO Micro and OpenPLC. By integrating ladder logic and PWM, this project demonstrates an efficient way to control light brightness with a single push button. Experiment with the timing variables and additional functionality to customize the system further.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>HTTP Web Client</title>
		<link>https://www.controllino.com/http-web-client/</link>
		
		<dc:creator><![CDATA[marcoriedi]]></dc:creator>
		<pubDate>Tue, 28 Nov 2023 10:50:30 +0000</pubDate>
				<category><![CDATA[MICRO]]></category>
		<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://www.controllino.com/?p=15025</guid>

					<description><![CDATA[Introduction Welcome to the &#8220;HTTP Web Client&#8221; tutorial using the CONTROLLINO MICRO. In this tutorial, we will learn how to create a web client that connects to a web server, using the provided example code as a starting point. Prerequisites Example Code Please grab the following example .ino file from Github: Step-by-Step Guide Step 1: [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Introduction</h2>



<p class="wp-block-paragraph">Welcome to the &#8220;HTTP Web Client&#8221; tutorial using the CONTROLLINO MICRO. In this tutorial, we will learn how to create a web client that connects to a web server, using the provided example code as a starting point.</p>



<h2 class="wp-block-heading">Prerequisites</h2>



<ul class="wp-block-list">
<li>Installed Arduino IDE.</li>



<li>CONTROLLINO MICRO board.</li>
</ul>



<h2 class="wp-block-heading">Example Code</h2>



<p class="wp-block-paragraph">Please grab the following example .ino file from Github:</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://github.com/CONTROLLINO-PLC/controllino_rp2040_firmware/blob/master/examples/arduino/common/WebClientRepeating/WebClientRepeating.ino" target="_blank" rel="noreferrer noopener">HTTP Web Client Example</a></div>
</div>



<h2 class="wp-block-heading">Step-by-Step Guide</h2>



<h3 class="wp-block-heading">Step 1: Setup the Arduino Environment</h3>



<ol class="wp-block-list">
<li><strong>Connect your MICRO </strong>to your computer.</li>



<li>Open the <strong>Arduino IDE</strong>.</li>



<li>Ensure that the <strong>appropriate board and port</strong> are selected in the Tools menu.</li>
</ol>



<h3 class="wp-block-heading">Step 2: Understanding the Code</h3>



<p class="wp-block-paragraph">The example code can be broken down into several key parts:</p>



<h4 class="wp-block-heading">Initialization</h4>



<ul class="wp-block-list">
<li><strong>MAC Address</strong>: A unique identifier for your network interface. You can use the provided address.</li>



<li><strong>IP and DNS</strong>: Optionally, you can set a static IP and DNS server address if DHCP fails.</li>
</ul>



<h4 class="wp-block-heading">Setup Function</h4>



<ul class="wp-block-list">
<li><strong>Start Serial Communication</strong>: Initialize serial communication for debugging.</li>



<li><strong>Initialize Ethernet</strong>: Attempt to start Ethernet with DHCP. If it fails, it uses the static IP set earlier.</li>
</ul>



<h4 class="wp-block-heading">Loop Function</h4>



<ul class="wp-block-list">
<li><strong>Handle Incoming Data</strong>: If data is received from the Ethernet, it is printed to the serial monitor for debugging.</li>



<li><strong>Reconnect and Send Requests</strong>: Every 10 seconds (as set by <code>postingInterval</code>), the <code>httpRequest</code> function is called to send a new request.</li>
</ul>



<h4 class="wp-block-heading">HTTP Request Function</h4>



<ul class="wp-block-list">
<li><strong>Connect to Server</strong>: Attempt to connect to the specified server on port 80.</li>



<li><strong>Send HTTP Request</strong>: If the connection is successful, send an HTTP GET request.</li>



<li><strong>Handle Failed Connection</strong>: If the connection fails, print an error message.</li>
</ul>



<h3 class="wp-block-heading">Step 3: Create the Web Client</h3>



<ol class="wp-block-list">
<li><strong>Modify the MAC Address</strong>: Change the <code>mac[]</code> array if you want to use a different MAC address.</li>



<li><strong>Set IP and DNS (Optional)</strong>: Modify <code>ip</code> and <code>myDns</code> if you need to use a static IP and DNS.</li>



<li><strong>Change Server Address</strong>: Replace <code>server[]</code> with the address of the web server you want to connect to.</li>



<li><strong>Upload Code</strong>: Connect your CONTROLLINO MICRO to your computer, select the appropriate board and port in the Arduino IDE, and upload the code.</li>



<li><strong>Monitor Output</strong>: Open the Serial Monitor in the Arduino IDE to see debug output and responses from the server.</li>
</ol>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">You now have a basic web client running on your CONTROLLINO MICRO. This client connects to a specified web server, sends an HTTP GET request, and prints the response. You can expand on this by modifying the request, handling different types of responses, or integrating this functionality into a larger project.</p>



<p class="wp-block-paragraph">Remember, networking can sometimes be tricky, so don&#8217;t hesitate to experiment and troubleshoot as needed. Enjoy exploring the capabilities of your CONTROLLINO MICRO!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Scan for I2C Devices</title>
		<link>https://www.controllino.com/scan-for-i2c-devices/</link>
		
		<dc:creator><![CDATA[marcoriedi]]></dc:creator>
		<pubDate>Tue, 28 Nov 2023 10:43:42 +0000</pubDate>
				<category><![CDATA[MICRO]]></category>
		<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://www.controllino.com/?p=15023</guid>

					<description><![CDATA[Introduction The I2C (Inter-Integrated Circuit) protocol is a popular means of communication between various sensors and devices. In this tutorial, we will learn how to create an I2C scanner using the CONTROLLINO MICRO, which is useful for detecting the I2C addresses of devices connected to your microcontroller. Prerequisites Example Code Please grab the following example [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Introduction</h2>



<p class="wp-block-paragraph">The I2C (Inter-Integrated Circuit) protocol is a popular means of communication between various sensors and devices. In this tutorial, we will learn how to create an I2C scanner using the CONTROLLINO MICRO, which is useful for detecting the I2C addresses of devices connected to your microcontroller.</p>



<h2 class="wp-block-heading">Prerequisites</h2>



<ul class="wp-block-list">
<li>Installed Arduino IDE.</li>



<li>CONTROLLINO MICRO board.</li>
</ul>



<h2 class="wp-block-heading">Example Code</h2>



<p class="wp-block-paragraph">Please grab the following example .ino file from Github:</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://github.com/CONTROLLINO-PLC/controllino_rp2040_firmware/blob/master/examples/arduino/common/i2c_scanner/i2c_scanner.ino" target="_blank" rel="noreferrer noopener">I2C Scanner Example</a></div>
</div>



<h2 class="wp-block-heading">Step-by-Step Guide</h2>



<h3 class="wp-block-heading">Step 1: Setup the Arduino Environment</h3>



<ol class="wp-block-list">
<li><strong>Connect your MICRO </strong>to your computer.</li>



<li>Open the <strong>Arduino IDE</strong>.</li>



<li>Ensure that the <strong>appropriate board and port</strong> are selected in the Tools menu.</li>
</ol>



<h3 class="wp-block-heading">Step 2: Understanding the Code</h3>



<h4 class="wp-block-heading">The Setup Function</h4>



<pre class="wp-block-code"><code>void setup()
{
  Wire.setSDA(PIN_WIRE0_SDA);
  Wire.setSCL(PIN_WIRE0_SCL);
  Wire.begin();
  Serial.begin(9600);
  while (!Serial);
  Serial.println("\nI2C Scanner");
}
</code></pre>



<ul class="wp-block-list">
<li><code>Wire.setSDA()</code> and <code>Wire.setSCL()</code>: Sets the SDA (data line) and SCL (clock line) pins for I2C communication.</li>



<li><code>Wire.begin()</code>: Initializes the I2C bus.</li>



<li><code>Serial.begin(9600)</code>: Starts serial communication at 9600 baud rate.</li>



<li><code>Serial.println("\nI2C Scanner")</code>: Prints a message to the Serial Monitor.</li>
</ul>



<h4 class="wp-block-heading">The Loop Function</h4>



<pre class="wp-block-code"><code>void loop()
{
  byte error, address;
  int nDevices;
  Serial.println("Scanning...");
  nDevices = 0;
  for (address = 1; address &lt; 127; address++)
  {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0)
    {
      // Device found
    }
    else if (error == 4)
    {
      // Unknown error
    }
  }
  // Print scan results
  delay(5000); // Wait for next scan
}
</code></pre>



<ul class="wp-block-list">
<li>Scans I2C addresses from 1 to 126.</li>



<li><code>Wire.beginTransmission(address)</code>: Starts transmission to a device at <code>address</code>.</li>



<li><code>error = Wire.endTransmission()</code>: Ends the transmission and returns an error status.</li>



<li>If <code>error</code> is 0, an I2C device is found.</li>



<li>If <code>error</code> is 4, there&#8217;s an unknown error at the address.</li>
</ul>



<h3 class="wp-block-heading">Step 3: Hardware Setup</h3>



<ol class="wp-block-list">
<li>Connect your I2C device(s) to the CONTROLLINO MICRO.</li>



<li>Ensure proper connections for SDA and SCL lines, along with power and ground.</li>
</ol>



<h3 class="wp-block-heading">Step 4: Using the I2C Scanner</h3>



<ol class="wp-block-list">
<li>Open the Serial Monitor in the Arduino IDE.</li>



<li>Set the baud rate to 9600.</li>



<li>Observe the output. The scanner will list the addresses of detected I2C devices.</li>
</ol>



<h3 class="wp-block-heading">Step 5: Interpreting Results</h3>



<ul class="wp-block-list">
<li>Addresses will be displayed in hexadecimal format.</li>



<li>Note down the addresses of your I2C devices for use in your projects.</li>
</ul>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">This tutorial has guided you through setting up an I2C scanner on the CONTROLLINO MICRO. This tool is invaluable for troubleshooting and setting up I2C communication with various sensors and peripherals.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Modbus RTU Server</title>
		<link>https://www.controllino.com/modbus-rtu-server/</link>
		
		<dc:creator><![CDATA[marcoriedi]]></dc:creator>
		<pubDate>Tue, 28 Nov 2023 10:38:06 +0000</pubDate>
				<category><![CDATA[MICRO]]></category>
		<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://www.controllino.com/?p=15021</guid>

					<description><![CDATA[Introduction This tutorial will guide you through setting up a Modbus RTU server on a CONTROLLINO MICRO. We&#8217;ll be using a modified version of an example code that demonstrates how to control an LED via a Modbus RTU server. Prerequisites Example Code Please grab the following example .ino file from Github: Step-by-Step Guide Step 1: [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Introduction</h2>



<p class="wp-block-paragraph">This tutorial will guide you through setting up a Modbus RTU server on a CONTROLLINO MICRO. We&#8217;ll be using a modified version of an example code that demonstrates how to control an LED via a Modbus RTU server.</p>



<h2 class="wp-block-heading">Prerequisites</h2>



<ul class="wp-block-list">
<li>Installed Arduino IDE.</li>



<li>CONTROLLINO MICRO board.</li>
</ul>



<h2 class="wp-block-heading">Example Code</h2>



<p class="wp-block-paragraph">Please grab the following example .ino file from Github:</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://github.com/CONTROLLINO-PLC/controllino_rp2040_firmware/blob/master/examples/arduino/common/ModbusRTUServerLED/ModbusRTUServerLED.ino" target="_blank" rel="noreferrer noopener">Modbus RTU Server Example</a></div>
</div>



<h2 class="wp-block-heading">Step-by-Step Guide</h2>



<h3 class="wp-block-heading">Step 1: Setup the Arduino Environment</h3>



<ol class="wp-block-list">
<li><strong>Connect your MICRO </strong>to your computer.</li>



<li>Open the <strong>Arduino IDE</strong>.</li>



<li>Ensure that the <strong>appropriate board and port</strong> are selected in the Tools menu.</li>



<li>Install the <code>ArduinoRS485</code> and <code>ArduinoModbus</code> libraries via the Library Manager in the Arduino IDE.</li>
</ol>



<h3 class="wp-block-heading">Step 2: Understanding the Modbus RTU Server Code</h3>



<p class="wp-block-paragraph">The provided code snippet establishes a Modbus RTU server. Here&#8217;s a breakdown:</p>



<ul class="wp-block-list">
<li><strong>Libraries</strong>: Include <code>ArduinoRS485</code> and <code>ArduinoModbus</code>.</li>



<li><strong>RS485 Configuration</strong>: Set up the RS485 serial communication.</li>



<li><strong>Setup Function</strong>: Initialize serial communication, set up the Modbus server and LED.</li>



<li><strong>Loop Function</strong>: Constantly checks for Modbus requests and toggles the LED based on the coil value.</li>
</ul>



<h3 class="wp-block-heading">Step 3: Testing the code</h3>



<p class="wp-block-paragraph">After uploading, your CONTROLLINO MICRO should be ready to respond to Modbus RTU client requests. Use a Modbus RTU client to send requests to your server:</p>



<ul class="wp-block-list">
<li>Writing a value of <code>1</code> to coil address <code>0x00</code> should turn the LED on.</li>



<li>Writing a value of <code>0</code> should turn it off.</li>
</ul>



<h2 class="wp-block-heading">Troubleshooting</h2>



<p class="wp-block-paragraph">If the LED does not respond as expected, check the following:</p>



<ul class="wp-block-list">
<li>Correct wiring of the LED and Modbus connections.</li>



<li>Verify the correct COM port and board settings in the Arduino IDE.</li>



<li>Make sure the Modbus client is correctly configured to communicate with your server.</li>
</ul>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">You have now successfully created a Modbus RTU server on your CONTROLLINO MICRO. This server can interact with Modbus clients, allowing for various automation and control applications. Experiment with different Modbus registers and functionalities to expand your project!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Modbus TCP Server</title>
		<link>https://www.controllino.com/modbus-tcp-server/</link>
		
		<dc:creator><![CDATA[marcoriedi]]></dc:creator>
		<pubDate>Tue, 28 Nov 2023 10:32:57 +0000</pubDate>
				<category><![CDATA[MICRO]]></category>
		<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://www.controllino.com/?p=15019</guid>

					<description><![CDATA[Introduction This tutorial will guide you through setting up a Modbus TCP server on a CONTROLLINO MICRO. We&#8217;ll be using a modified version of an example code that demonstrates how to control an LED via a Modbus TCP server. Prerequisites Example Code Please grab the following example .ino file from Github: Step-by-Step Guide Step 1: [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Introduction</h2>



<p class="wp-block-paragraph">This tutorial will guide you through setting up a Modbus TCP server on a CONTROLLINO MICRO. We&#8217;ll be using a modified version of an example code that demonstrates how to control an LED via a Modbus TCP server.</p>



<h2 class="wp-block-heading">Prerequisites</h2>



<ul class="wp-block-list">
<li>Installed Arduino IDE.</li>



<li>CONTROLLINO MICRO board.</li>
</ul>



<h2 class="wp-block-heading">Example Code</h2>



<p class="wp-block-paragraph">Please grab the following example .ino file from Github:</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://github.com/CONTROLLINO-PLC/controllino_rp2040_firmware/blob/master/examples/arduino/common/EthernetModbusServerLED/EthernetModbusServerLED.ino" target="_blank" rel="noreferrer noopener">Modbus TCP Server Example</a></div>
</div>



<h2 class="wp-block-heading">Step-by-Step Guide</h2>



<h3 class="wp-block-heading">Step 1: Setup the Arduino Environment</h3>



<ol class="wp-block-list">
<li><strong>Connect your MICRO </strong>to your computer.</li>



<li>Open the <strong>Arduino IDE</strong>.</li>



<li>Ensure that the <strong>appropriate board and port</strong> are selected in the Tools menu.</li>



<li>In the Arduino IDE, include the SPI, Ethernet, ArduinoRS485, and ArduinoModbus libraries.</li>
</ol>



<h3 class="wp-block-heading">Step 2: Configure Network Settings</h3>



<p class="wp-block-paragraph">Define a MAC address and IP address for your device. Replace the <code>mac</code> and <code>ip</code> variables with your desired values.</p>



<h3 class="wp-block-heading">Step 3: Initialize Ethernet and Modbus TCP Server</h3>



<p class="wp-block-paragraph">In the <code>setup()</code> function, start the Ethernet connection using <code>Ethernet.begin(mac, ip)</code>. Verify Ethernet hardware and connection status and initialize the Modbus TCP server with <code>modbusTCPServer.begin()</code>.</p>



<h3 class="wp-block-heading">Step 4: Configure Digital Outputs &amp; Modbus Coils</h3>



<p class="wp-block-paragraph">Set the LED pin as an output and initialize it to LOW (off). Configure a single coil at address <code>0x00</code> using <code>modbusTCPServer.configureCoils(0x00, 1)</code>.</p>



<h3 class="wp-block-heading">Step 5: Handling connections and updating the LED value</h3>



<p class="wp-block-paragraph"><strong>Handling Client Connections</strong></p>



<p class="wp-block-paragraph">In the <code>loop()</code> function, use <code>ethServer.available()</code> to listen for incoming clients. Once a client is connected, use <code>modbusTCPServer.accept(client)</code> to accept the connection.</p>



<p class="wp-block-paragraph"><strong>Polling and Controlling the LED</strong></p>



<p class="wp-block-paragraph">Continuously call <code>modbusTCPServer.poll()</code> to listen for Modbus requests. Use <code>updateLED()</code> to read the coil value and update the LED state.</p>



<p class="wp-block-paragraph"><strong>The <code>updateLED</code> Function</strong></p>



<p class="wp-block-paragraph">This function reads the coil value using <code>modbusTCPServer.coilRead(0x00)</code>. It then sets the LED state based on the coil value.</p>



<h2 class="wp-block-heading">Troubleshooting</h2>



<ul class="wp-block-list">
<li>If the LED does not respond, check your network connection and ensure your Modbus client is configured correctly.</li>



<li>Verify the MAC and IP address are correctly set for your network environment.</li>



<li>Make sure the correct board and port are selected in the Arduino IDE.</li>
</ul>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">You have now successfully created a Modbus TCP server on your CONTROLLINO MICRO. This server can interact with Modbus clients, allowing for various automation and control applications. Experiment with different Modbus registers and functionalities to expand your project!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ECC608 Crypto Chip: Random Number Generator</title>
		<link>https://www.controllino.com/ecc608-crypto-chip-random-number-generator/</link>
		
		<dc:creator><![CDATA[marcoriedi]]></dc:creator>
		<pubDate>Tue, 28 Nov 2023 10:26:20 +0000</pubDate>
				<category><![CDATA[MICRO]]></category>
		<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://www.controllino.com/?p=15017</guid>

					<description><![CDATA[Introduction In this tutorial, we will explore how to use the ECC608 Crypto Chip on a CONTROLLINO MICRO board to generate truly random numbers. This is particularly useful in applications requiring high levels of security, such as cryptographic operations, secure communications, or any scenario where unpredictability is crucial. Prerequisites Example Code Please grab the following [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Introduction</h2>



<p class="wp-block-paragraph">In this tutorial, we will explore how to use the ECC608 Crypto Chip on a CONTROLLINO MICRO board to generate truly random numbers. This is particularly useful in applications requiring high levels of security, such as cryptographic operations, secure communications, or any scenario where unpredictability is crucial.</p>



<h2 class="wp-block-heading">Prerequisites</h2>



<ul class="wp-block-list">
<li>Installed Arduino IDE.</li>



<li>CONTROLLINO MICRO board.</li>
</ul>



<h2 class="wp-block-heading">Example Code</h2>



<p class="wp-block-paragraph">Please grab the following example .ino file from Github:</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://github.com/CONTROLLINO-PLC/controllino_rp2040_firmware/blob/master/examples/arduino/common/ECCX08RandomNumber/ECCX08RandomNumber.ino" target="_blank" rel="noreferrer noopener">ECC608 Random Number Generator Example</a></div>
</div>



<h2 class="wp-block-heading">Step-by-Step Guide</h2>



<h3 class="wp-block-heading">Step 1: Setup the Arduino Environment</h3>



<ol class="wp-block-list">
<li><strong>Connect your MICRO </strong>to your computer.</li>



<li>Open the <strong>Arduino IDE</strong>.</li>



<li>Ensure that the <strong>appropriate board and port</strong> are selected in the Tools menu.</li>
</ol>



<h3 class="wp-block-heading">Step 2: Understanding the Provided Code</h3>



<pre class="wp-block-code"><code>
#include &lt;SPI.h>
#include &lt;ArduinoECCX08.h>

void setup() {
  Serial.begin(115200);
  while (!Serial);
  delay(2000);

  Wire.setSDA(2);
  Wire.setSCL(3);
  
  if (!ECCX08.begin()) {
    Serial.println("Failed to communicate with ECC508/ECC608!");
    while (1);
  }

  if (!ECCX08.locked()) {
    Serial.println("The ECC508/ECC608 is not locked!");
    while (1);
  }
}

void loop() {
  Serial.print("Random number = ");
  Serial.println(ECCX08.random(65535));

  delay(1000);
}</code></pre>



<h3 class="wp-block-heading"><em>Code Breakdown</em></h3>



<ul class="wp-block-list">
<li><strong>Initialization:</strong> The <code>setup()</code> function initializes serial communication and sets up the I2C communication with specific SDA and SCL pins. It also checks if the ECC608 chip is properly communicating and locked for secure operations.</li>



<li><strong>Generating Random Numbers:</strong> The <code>loop()</code> function continuously generates a random number using <code>ECCX08.random(65535)</code> and prints it to the Serial Monitor every second.</li>
</ul>



<h3 class="wp-block-heading">Step 3: Running the Code</h3>



<ol class="wp-block-list">
<li>Copy the provided code into a new sketch in the Arduino IDE.</li>



<li>Upload the sketch to your CONTROLLINO MICRO.</li>



<li>Open the Serial Monitor (<code>Tools &gt; Serial Monitor</code>) to view the random numbers being generated.</li>
</ol>



<h2 class="wp-block-heading">Troubleshooting</h2>



<ul class="wp-block-list">
<li>If the Serial Monitor displays an error related to the ECC608 chip, ensure that the chip is correctly configured and locked.</li>



<li>For any issues related to the Arduino IDE or board connections, consult the official Arduino forums or documentation.</li>
</ul>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">By following this tutorial, you have successfully used the ECC608 Crypto Chip on your CONTROLLINO MICRO to generate truly random numbers. This functionality can be integrated into larger projects where secure random number generation is required.</p>



<p class="wp-block-paragraph">Feel free to modify the code to suit your specific application needs, and explore other capabilities of the ECC608 chip to enhance the security of your projects.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ECC608 Crypto Chip: Self-signed Certificate</title>
		<link>https://www.controllino.com/ecc608-crypto-chip-self-signed-certificate/</link>
		
		<dc:creator><![CDATA[marcoriedi]]></dc:creator>
		<pubDate>Tue, 28 Nov 2023 10:18:26 +0000</pubDate>
				<category><![CDATA[MICRO]]></category>
		<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://www.controllino.com/?p=15015</guid>

					<description><![CDATA[Introduction Creating a self-signed certificate using the ECC608 crypto chip involves generating a private key within the chip and then creating a certificate that is signed with this key. This tutorial demonstrates the process using CONTROLLINO MICRO and the ECC608 chip. Prerequisites Example Code Please grab the following example .ino file from Github: Step-by-Step Guide [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Introduction</h2>



<p class="wp-block-paragraph">Creating a self-signed certificate using the ECC608 crypto chip involves generating a private key within the chip and then creating a certificate that is signed with this key. This tutorial demonstrates the process using CONTROLLINO MICRO and the ECC608 chip.</p>



<h2 class="wp-block-heading">Prerequisites</h2>



<ul class="wp-block-list">
<li>Installed Arduino IDE.</li>



<li>CONTROLLINO MICRO board.</li>
</ul>



<h2 class="wp-block-heading">Example Code</h2>



<p class="wp-block-paragraph">Please grab the following example .ino file from Github:</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://github.com/CONTROLLINO-PLC/controllino_rp2040_firmware/blob/master/examples/arduino/common/ECCX08SelfSignedCert/ECCX08SelfSignedCert.ino" target="_blank" rel="noreferrer noopener">ECC608 Self-Signed Cert Example</a></div>
</div>



<h2 class="wp-block-heading">Step-by-Step Guide</h2>



<h3 class="wp-block-heading">Step 1: Setup the Arduino Environment</h3>



<ol class="wp-block-list">
<li><strong>Connect your MICRO </strong>to your computer.</li>



<li>Open the <strong>Arduino IDE</strong>.</li>



<li>Ensure that the <strong>appropriate board and port</strong> are selected in the Tools menu.</li>
</ol>



<h3 class="wp-block-heading">Step 2: Understanding the Provided Code</h3>



<p class="wp-block-paragraph">The provided example code performs the following functions:</p>



<ul class="wp-block-list">
<li>Initializes the ECC608 chip.</li>



<li>Checks if the chip is locked and prompts the user to lock it with a default TLS configuration if not.</li>



<li>Gathers input for certificate details such as issue date, expiry, and slot numbers for key storage.</li>



<li>Generates a new private key (if required) and a self-signed certificate.</li>



<li>Outputs the certificate and its SHA1 fingerprint.</li>
</ul>



<h3 class="wp-block-heading">Step 3: Load the Example Code</h3>



<ol class="wp-block-list">
<li>Copy the provided code into a new sketch in the Arduino IDE.</li>



<li>Review the code to understand its flow and functionality.</li>
</ol>



<h3 class="wp-block-heading">Step 4: Modify the Code (Optional)</h3>



<p class="wp-block-paragraph">You can modify the default values or add additional functionality as needed. For instance, you might want to change the default slot numbers or the default years of validity for the certificate.</p>



<h3 class="wp-block-heading">Step 5: Compile and Upload the Code</h3>



<ol class="wp-block-list">
<li>Click on the <strong>Verify</strong> button to compile the code.</li>



<li>Click on the <strong>Upload</strong> button to upload the code to your Arduino MKR board.</li>
</ol>



<h3 class="wp-block-heading">Step 6: Interact with the Program</h3>



<p class="wp-block-paragraph">After uploading, open the Serial Monitor. You will see prompts asking for various details needed to generate the certificate:</p>



<ul class="wp-block-list">
<li>Issue date and time of the certificate.</li>



<li>Expiry duration of the certificate.</li>



<li>Slots for storing the private key and certificate.</li>



<li>Choice to generate a new key.</li>
</ul>



<h3 class="wp-block-heading">Step 7: Generate the Certificate</h3>



<p class="wp-block-paragraph">Respond to the prompts in the Serial Monitor. The program will generate a self-signed certificate based on your responses and display it along with its SHA1 fingerprint.</p>



<h2 class="wp-block-heading">Troubleshooting</h2>



<ul class="wp-block-list">
<li>If the Serial Monitor displays an error related to the ECC608 chip, ensure that the chip is correctly configured and locked.</li>



<li>For any issues related to the Arduino IDE or board connections, consult the official Arduino forums or documentation.</li>
</ul>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">You now have a self-signed certificate generated by the ECC608 chip. This certificate can be used for various cryptographic purposes, enhancing the security of your projects.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CAN Sender</title>
		<link>https://www.controllino.com/can-sender/</link>
		
		<dc:creator><![CDATA[marcoriedi]]></dc:creator>
		<pubDate>Tue, 28 Nov 2023 10:14:00 +0000</pubDate>
				<category><![CDATA[MICRO]]></category>
		<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://www.controllino.com/?p=15013</guid>

					<description><![CDATA[Introduction This tutorial will guide you through using the CAN (Controller Area Network) port on the CONTROLLINO MICRO to send data. We&#8217;ll use example code to demonstrate how to set up and send both standard and extended CAN messages. Prerequisites Example Code Please grab the following example .ino file from Github: Step-by-Step Guide Step 1: [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Introduction</h2>



<p class="wp-block-paragraph">This tutorial will guide you through using the CAN (Controller Area Network) port on the CONTROLLINO MICRO to send data. We&#8217;ll use example code to demonstrate how to set up and send both standard and extended CAN messages.</p>



<h2 class="wp-block-heading">Prerequisites</h2>



<ul class="wp-block-list">
<li>Installed Arduino IDE.</li>



<li>CONTROLLINO MICRO board.</li>
</ul>



<h2 class="wp-block-heading">Example Code</h2>



<p class="wp-block-paragraph">Please grab the following example .ino file from Github:</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://github.com/CONTROLLINO-PLC/controllino_rp2040_firmware/blob/master/examples/arduino/common/CANSender/CANSender.ino" target="_blank" rel="noreferrer noopener">CAN Sender Example</a></div>
</div>



<h2 class="wp-block-heading">Step-by-Step Guide</h2>



<h3 class="wp-block-heading">Step 1: Initialization</h3>



<ul class="wp-block-list">
<li><strong>Serial Begin</strong>: Initialize serial communication at 115200 baud rate to monitor the data sending process.cppCopy code<code>Serial.begin(115200);</code></li>



<li><strong>CAN Initialization</strong>: Start the CAN bus at 500 kbps. This is a common speed for CAN networks.cppCopy code<code>SPI1.setRX(PIN_SPI1_MISO); SPI1.setTX(PIN_SPI1_MOSI); SPI1.setSCK(PIN_SPI1_SCK); if (!CAN.begin(500E3)) { Serial.println("Starting CAN failed!"); while (1); }</code></li>
</ul>



<h3 class="wp-block-heading">Step 2: Sending Standard CAN Packets</h3>



<ul class="wp-block-list">
<li><strong>Begin Packet</strong>: Start a CAN packet with a standard ID (11 bits). In this example, <code>0x12</code> is used as the ID.cppCopy code<code>CAN.beginPacket(0x12);</code></li>



<li><strong>Write Data</strong>: Send the data bytes. Here, we&#8217;re sending the word &#8216;hello&#8217;.cppCopy code<code>CAN.write('h'); CAN.write('e'); CAN.write('l'); CAN.write('l'); CAN.write('o');</code></li>



<li><strong>End Packet</strong>: End the CAN packet transmission.cppCopy code<code>CAN.endPacket();</code></li>
</ul>



<h3 class="wp-block-heading">Step 3: Sending Extended CAN Packets</h3>



<ul class="wp-block-list">
<li><strong>Begin Extended Packet</strong>: Start an extended CAN packet with a 29-bit ID. Example ID: <code>0xabcdef</code>.cppCopy code<code>CAN.beginExtendedPacket(0xabcdef);</code></li>



<li><strong>Write Extended Data</strong>: Similar to standard packets, but with different data. In this case, &#8216;world&#8217;.cppCopy code<code>CAN.write('w'); CAN.write('o'); CAN.write('r'); CAN.write('l'); CAN.write('d');</code></li>



<li><strong>End Extended Packet</strong>: Conclude the extended packet transmission.cppCopy code<code>CAN.endPacket();</code></li>
</ul>



<h3 class="wp-block-heading">Step 4: Loop</h3>



<p class="wp-block-paragraph">The <code>loop()</code> function sends these packets continuously at one-second intervals.</p>



<h2 class="wp-block-heading">Testing and Validation</h2>



<ol class="wp-block-list">
<li><strong>Monitor Serial Output</strong>: Open the Serial Monitor in your Arduino IDE to view the sending process and confirm successful transmission.</li>



<li><strong>Check CAN Network</strong>: If possible, use a CAN analyzer or another CAN device to ensure the packets are being received correctly.</li>



<li><strong>Troubleshooting</strong>: If there are issues in transmission, check connections, baud rate settings, and CAN IDs.</li>
</ol>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">With this tutorial, you should be able to send both standard and extended CAN messages from your CONTROLLINO MICRO. This functionality is essential for many automotive and industrial applications using the CAN network.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CAN Receiver</title>
		<link>https://www.controllino.com/can-receiver/</link>
		
		<dc:creator><![CDATA[marcoriedi]]></dc:creator>
		<pubDate>Mon, 27 Nov 2023 09:45:25 +0000</pubDate>
				<category><![CDATA[MICRO]]></category>
		<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://www.controllino.com/?p=15004</guid>

					<description><![CDATA[Introduction In this tutorial, we&#8217;ll learn how to use the CAN (Controller Area Network) port on the CONTROLLINO MICRO to receive data. CAN is a robust vehicle bus standard designed to allow microcontrollers and devices to communicate with each other&#8217;s applications without a host computer. Prerequisites Example Code Please grab the following example .ino file [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Introduction</h2>



<p class="wp-block-paragraph">In this tutorial, we&#8217;ll learn how to use the CAN (Controller Area Network) port on the CONTROLLINO MICRO to receive data. CAN is a robust vehicle bus standard designed to allow microcontrollers and devices to communicate with each other&#8217;s applications without a host computer.</p>



<h2 class="wp-block-heading">Prerequisites</h2>



<ul class="wp-block-list">
<li>Installed Arduino IDE.</li>



<li>CONTROLLINO MICRO board.</li>
</ul>



<h2 class="wp-block-heading">Example Code</h2>



<p class="wp-block-paragraph">Please grab the following example .ino file from Github:</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://github.com/CONTROLLINO-PLC/controllino_rp2040_firmware/blob/master/examples/arduino/common/CANReceiver/CANReceiver.ino" target="_blank" rel="noreferrer noopener">CAN Receiver Example</a></div>
</div>



<h2 class="wp-block-heading">Overview of the Example Code</h2>



<p class="wp-block-paragraph">The provided example code is a simple CAN Receiver program. It initializes the CAN bus at a speed of 500 kbps and continuously checks for incoming CAN packets. When a packet is received, it prints its details and data to the Serial Monitor.</p>



<h3 class="wp-block-heading">Key Functions</h3>



<ul class="wp-block-list">
<li><code>CAN.begin(speed)</code>: Initializes the CAN bus at the specified speed.</li>



<li><code>CAN.parsePacket()</code>: Checks for incoming packets and returns their size.</li>



<li><code>CAN.packetId()</code>: Returns the ID of the received packet.</li>



<li><code>CAN.packetExtended()</code>: Checks if the packet uses an extended ID.</li>



<li><code>CAN.packetRtr()</code>: Checks if the packet is a Remote Transmission Request (RTR).</li>



<li><code>CAN.read()</code>: Reads a byte of data from the received packet.</li>
</ul>



<h2 class="wp-block-heading">Step-by-Step Guide</h2>



<h3 class="wp-block-heading">Step 1: Setting Up Your Environment</h3>



<ol class="wp-block-list">
<li>Connect your CONTROLLINO MICRO to your computer.</li>



<li>Open the Arduino IDE and select the correct board and port for your CONTROLLINO MICRO.</li>
</ol>



<h3 class="wp-block-heading">Step 2: Understanding the Code</h3>



<ol class="wp-block-list">
<li><strong>Serial Communication</strong>: The <code>Serial.begin(115200);</code> command starts serial communication at a baud rate of 115200. This is useful for debugging and monitoring CAN traffic.</li>



<li><strong>CAN Initialization</strong>: <code>CAN.begin(500E3);</code> initializes the CAN bus at 500 kbps. The <code>if</code> statement checks if the CAN bus starts successfully.</li>



<li><strong>Receiving CAN Packets</strong>: Inside the <code>loop()</code>, <code>CAN.parsePacket();</code> checks for incoming packets. If a packet is received, its details (like ID, type, size) are printed to the Serial Monitor.</li>
</ol>



<h3 class="wp-block-heading">Step 3: Modifying the Code for Your Application</h3>



<ul class="wp-block-list">
<li>You can modify the <code>loop()</code> function to suit your application needs. For example, you might want to perform specific actions based on the packet&#8217;s ID or data.</li>
</ul>



<h3 class="wp-block-heading">Step 4: Uploading and Testing</h3>



<ol class="wp-block-list">
<li>Copy the provided example code into a new sketch in the Arduino IDE.</li>



<li>Upload the sketch to your CONTROLLINO MICRO.</li>



<li>Open the Serial Monitor to view the output.</li>
</ol>



<h3 class="wp-block-heading">Step 5: Debugging</h3>



<ul class="wp-block-list">
<li>If you encounter issues, ensure your CAN bus is correctly configured and all devices are properly connected.</li>



<li>Check the baud rate and CAN bus settings.</li>
</ul>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">You now have a basic understanding of how to use the CAN port on the CONTROLLINO MICRO to receive data. This setup can be the foundation for more complex applications involving vehicle networks, industrial automation, and more.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
