<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Object Oriented]]></title><description><![CDATA[Coding and Hacking Thoughts]]></description><link>https://objectoriented.cz/</link><image><url>https://objectoriented.cz/favicon.png</url><title>Object Oriented</title><link>https://objectoriented.cz/</link></image><generator>Ghost 2.30</generator><lastBuildDate>Sun, 12 Apr 2026 00:48:58 GMT</lastBuildDate><atom:link href="https://objectoriented.cz/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Monitoring Raspberry Pi temperatures including SSD]]></title><description><![CDATA[<p>If you run a Raspberry Pi 5 with an NVMe SSD, you probably want to keep an eye on temperatures. There are quite a few projects out there that let you graph CPU or GPU temperature over time, like <a href="https://github.com/mstenta/atmospi">atmospi</a>, <a href="https://github.com/toddq/Temperature-Monitor">Temperature-Monitor</a>, or various Grafana+Prometheus setups. The problem is most</p>]]></description><link>https://objectoriented.cz/monitoring-raspberry-pi-temperatures-including-ssd/</link><guid isPermaLink="false">699c90c5a00f271464b7fc2e</guid><dc:creator><![CDATA[Michal Aichinger]]></dc:creator><pubDate>Mon, 23 Feb 2026 17:44:07 GMT</pubDate><content:encoded><![CDATA[<p>If you run a Raspberry Pi 5 with an NVMe SSD, you probably want to keep an eye on temperatures. There are quite a few projects out there that let you graph CPU or GPU temperature over time, like <a href="https://github.com/mstenta/atmospi">atmospi</a>, <a href="https://github.com/toddq/Temperature-Monitor">Temperature-Monitor</a>, or various Grafana+Prometheus setups. The problem is most of them only care about CPU temperature and maybe ambient room temp. None of them monitor SSD temperature, which is something you actually want to watch on a Pi 5 where the NVMe drive sits right under the board and can get surprisingly hot. You could set up a full monitoring stack with Prometheus, InfluxDB and Grafana, but that feels like overkill for a small single-board computer that should be doing its actual job, not running a monitoring infrastructure.</p><p>I put together <a href="https://github.com/aichi/rpi-temperature-monitoring">rpi-temperature-monitoring</a> to solve exactly this. It reads CPU, GPU, and SSD/NVMe temperatures (via smartctl), stores everything in a local SQLite database, and serves a dashboard with interactive charts from a built-in Python web server. The whole thing runs on Python standard library only, no external dependencies. You get a web UI with Chart.js graphs showing 1-hour to 1-week views, auto-refreshing every 30 seconds. It also supports external sensors like DS18B20 or DHT11/DHT22 through a plugin system if you want to go further.</p><p>Pure Python, SQLite and a single <code>setup.sh</code> to get it running with systemd services. The SSD monitoring works with NVMe and SATA devices and even stores the device model name so you can tell which drive is which. If you run a Pi as a home server or a node for something and want a simple way to check if your SSD is overheating, this does the job without pulling in half the internet as dependencies.</p>]]></content:encoded></item><item><title><![CDATA[Hydra wallet on RaspberryPI4 64bit]]></title><description><![CDATA[<p>Previous article was about 32bit Raspbian, now we need to switch to 64bit version due to wallet not being compiled for 32bits anymore.</p><p>Setup SD card according to <a href="https://roboticsbackend.com/enable-ssh-on-raspberry-pi-raspbian/">https://roboticsbackend.com/enable-ssh-on-raspberry-pi-raspbian/</a>, enable SSH, setup wifi and setup main user password.</p><p>Copy data from SSD to SD card, like wallet.</p>]]></description><link>https://objectoriented.cz/hydra-wallet-on-rpi4-64-bits/</link><guid isPermaLink="false">6495f000bd59c81a80938ca0</guid><dc:creator><![CDATA[Michal Aichinger]]></dc:creator><pubDate>Tue, 04 Jul 2023 13:28:05 GMT</pubDate><content:encoded><![CDATA[<p>Previous article was about 32bit Raspbian, now we need to switch to 64bit version due to wallet not being compiled for 32bits anymore.</p><p>Setup SD card according to <a href="https://roboticsbackend.com/enable-ssh-on-raspberry-pi-raspbian/">https://roboticsbackend.com/enable-ssh-on-raspberry-pi-raspbian/</a>, enable SSH, setup wifi and setup main user password.</p><p>Copy data from SSD to SD card, like wallet. Mount SSD acoording to <a href="https://linuxhint.com/mount_usb_drive_debian/">https://linuxhint.com/mount_usb_drive_debian/</a> and copy /home/&lt;user&gt;/.hydra directory to SD card. If the blockchain history is too big, copy only .hydra/wallet folder with your wallet.</p><p>When making the bit copy of SD card back to SSD, it is still great to use <a href="https://github.com/billw2/rpi-clone">https://github.com/billw2/rpi-clone</a> and follow paragraph 4 with command </p><!--kg-card-begin: code--><pre><code>rpi-clone -l sda</code></pre><!--kg-card-end: code--><p></p>]]></content:encoded></item><item><title><![CDATA[Hydra wallet on RaspberryPI4 32bit]]></title><description><![CDATA[<p>I somehow got LOC token coins which were migrating from ETH network to new Hydra chain. Speaking about coins next time now I wanna share how I setup Rpi4 and Hydra wallet for staking.</p><p>I bought Rpi4 with maximum RAM and with 1TB SSD as originally I wanted to play</p>]]></description><link>https://objectoriented.cz/hydra-wallet-on-raspberrypi4/</link><guid isPermaLink="false">62715cbd68996126f0b472cc</guid><dc:creator><![CDATA[Michal Aichinger]]></dc:creator><pubDate>Tue, 03 May 2022 17:16:20 GMT</pubDate><content:encoded><![CDATA[<p>I somehow got LOC token coins which were migrating from ETH network to new Hydra chain. Speaking about coins next time now I wanna share how I setup Rpi4 and Hydra wallet for staking.</p><p>I bought Rpi4 with maximum RAM and with 1TB SSD as originally I wanted to play with BTC full node and LN. But I diverged my plan after a while to Hydra as it promised around 70% APY reward. I am going to share what steps I took to setup Rpi and the wallet as it wasn’t straight forward.</p><p><strong>Rpi4 setup</strong></p><p>Imagine you buy Rpi, have some microSD card and want to run Linux from SSD as your goal is to run full BTC node. Where to start? Great start is to prepare SD card and put Raspberry Pi OS on it (<a href="https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up/2">https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up/2</a>). As I don’t have external keyboard nor microHDMI cable I wanted to set everything via SSH. For that you need to enable SSH on first boot, the post (<a href="https://www.raspberrypi.org/documentation/computers/remote-access.html">https://www.raspberrypi.org/documentation/computers/remote-access.html</a>) is straight forward, you need to create file with <strong>ssh</strong> name in boot partition. Same page also helps with finding what is the IP address associated with Rpi when you connect it to computer via cable. I used <strong>arp -a </strong>command to list all interfaces and associated address on my MacOS. As I allowed to share internet I was searching for bridges and one of them had IP address 192.168.2.2. Then connection is easy: <strong>ssh </strong><a href="mailto:pi@192.168.2.2"><strong>pi@192.168.2.2</strong></a>.</p><p>Now you are connected to Rpi which starts from SD card, how to configure it to start from SSD without SD card? (<a href="https://peyanski.com/how-to-boot-raspberry-pi-4-from-ssd/">https://peyanski.com/how-to-boot-raspberry-pi-4-from-ssd/</a>) or (<a href="https://www.maxinoha.cz/raspberry-pi-4-boot-z-ssd/">https://www.maxinoha.cz/raspberry-pi-4-boot-z-ssd/</a>) articles shows how to copy system from SD card to SSD and enable boot from SSD, but the copy tool is GUI application. How to copy that from console and e.g. expand partition? I used rpi-clone console application which is pretty straight forward to use (<a href="https://github.com/billw2/rpi-clone">https://github.com/billw2/rpi-clone</a>).</p><p><strong>Building Hydra wallet</strong></p><p>As we installed RPI OS, which is 64bit system we are gonna hit first issue, wallet deamon woudn't run when unpacking the downloaded 64bit Hydra release:</p><blockquote>./hydrad<br>-bash: ./hydrad: cannot execute binary file: Exec format error</blockquote><p>So continue with manual installation on Ubuntu: (<a href="https://github.com/Hydra-Chain/node">https://github.com/Hydra-Chain/node</a>):</p><blockquote>sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils git cmake libboost-all-dev libgmp3-dev</blockquote><blockquote>sudo apt-get install software-properties-common</blockquote><p>We cannot add bitcoin repository as it is obsolete, but it is added only to have Berkley DB binaries. We need to build libdb4.8 on our own from source. All details can be found in this answer (<a href="https://askubuntu.com/a/976624">https://askubuntu.com/a/976624</a>).</p><blockquote>$ wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'<br>$ tar -xzvf db-4.8.30.NC.tar.gz<br>$ cd db-4.8.30.NC/build_unix/<br>$ ../dist/configure --enable-cxx<br>$ make<br>$ sudo make install</blockquote><p>Tell your system where to find db4.8:</p><blockquote>$ export BDB_INCLUDE_PATH="/usr/local/BerkeleyDB.4.8/include"<br>$ export BDB_LIB_PATH="/usr/local/BerkeleyDB.4.8/lib"<br>$ sudo ln -s /usr/local/BerkeleyDB.4.8/lib/libdb-4.8.so /usr/lib/libdb-4.8.so<br>$ sudo ln -s /usr/local/BerkeleyDB.4.8/lib/libdb_cxx-4.8.so /usr/lib/libdb_cxx-4.8.so<br>$ sudo ldconfig</blockquote><p>After that you can continue with compilation of Hydra</p><blockquote>$ ./autogen.sh<br>$ configure  CPPFLAGS="-I/usr/local/BerkeleyDB.4.8/include -O2" LDFLAGS="-L/usr/local/BerkeleyDB.4.8/lib"<br>$ make -j2</blockquote><p>See we did tell configure where the libraries are. More details here: (<a href="https://vhernando.github.io/bitcoin-core-node-build-sources-debian">https://vhernando.github.io/bitcoin-core-node-build-sources-debian</a>)</p><p>After that we should also set LD_LIBRARY_PATH this way:</p><blockquote>$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/libdb-4.8.so</blockquote><p>And we are ready to run daemon to sync the chain history on the machine. Try to run from src folder</p><blockquote>$ hydrad</blockquote><p>Voala, it works. So now it is time to import your keys (<a href="https://docs.hydrachain.org/hydra-for-beginners#importing-your-key-using-the-cli-in-linux">https://docs.hydrachain.org/hydra-for-beginners#importing-your-key-using-the-cli-in-linux</a>) or setup fresh wallet. After that you can start daemon to run on background:</p><blockquote>hydrad -daemon</blockquote><p><strong>Solving issues</strong></p><p>Once RPi wasn't reachable via SSH with error: <em>kex_exchange_identification: read: Connection reset by peer.</em> After restart I was checking /var/log/auth.log for any clues why sshd disconnected (<a href="https://raspberrypi.stackexchange.com/a/111734">https://raspberrypi.stackexchange.com/a/111734</a>). I dug up the syslog with the </p><blockquote>tail -f -n X /var/log/syslog </blockquote><p>command (where X  is number of lines you want to display. I then noticed few lines mentioning a <strong>Voltage problem</strong> (sorry I did keep the exact terms).</p><p>Another fancy issue is when you want to connect old monitor with DVI-HDMI adapter. It could or couldn't work. Fix is easy. Either use raspi-config or edit /boot/config.txt and enable <strong>hdmi_force_hotplug=1</strong>.</p>]]></content:encoded></item><item><title><![CDATA[Ghost 2.x on Azure]]></title><description><![CDATA[<p>When you want your own blog but WordPress is beast for you, you can end up with Ghost.</p><p>Nowadays it is much simpler to start with Ghost 2.x on Azure as there are lot of tutorials. According to this blog: <a href="https://www.gatevnotes.com/introducing-ghost-2-on-azure-web-app-service/">https://www.gatevnotes.com/introducing-ghost-2-on-azure-web-app-service/</a> you can install Ghost</p>]]></description><link>https://objectoriented.cz/ghost-2-x-on-azure/</link><guid isPermaLink="false">5d683b4f5c2a7128f85f5c8f</guid><dc:creator><![CDATA[Michal Aichinger]]></dc:creator><pubDate>Mon, 09 Sep 2019 11:00:00 GMT</pubDate><content:encoded><![CDATA[<p>When you want your own blog but WordPress is beast for you, you can end up with Ghost.</p><p>Nowadays it is much simpler to start with Ghost 2.x on Azure as there are lot of tutorials. According to this blog: <a href="https://www.gatevnotes.com/introducing-ghost-2-on-azure-web-app-service/">https://www.gatevnotes.com/introducing-ghost-2-on-azure-web-app-service/</a> you can install Ghost by one click.</p><p>Now your blog is running on <strong>https://{something}.azurewebsites.net</strong> which is great for testing but you would like your own domain, right :) You can buy your own at your domain registrar or through Azure portal. In this tutorial is simply explained how to map your domain to App Service powering your blog: <a href="https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-custom-domain">https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-custom-domain</a>.</p><p>Now you have domain, but browser would complain about certificate as it is still using certificate for azurewebsites.net domain. Nowadays you can have free certificate from Let's Encrypt and it is quite easy to deploy it in Azure. Follow this blog post: <a href="https://gooroo.io/GoorooTHINK/Article/16420/Lets-Encrypt-Azure-Web-Apps-the-Free-and-Easy-Way/21872#.XXJroyj7SCo">https://gooroo.io/GoorooTHINK/Article/16420/Lets-Encrypt-Azure-Web-Apps-the-Free-and-Easy-Way/21872</a>. As it is bit dated there are two changes. Instead of: </p><!--kg-card-begin: markdown--><p><code>$password = '{some strong password}'</code></p>
<!--kg-card-end: markdown--><p>you should create secure string:</p><!--kg-card-begin: markdown--><p><code>$password = ConvertTo-SecureString '{some strong password}' -AsPlainText -Force</code></p>
<!--kg-card-end: markdown--><p>When finished with tutorial, blog should run on new domain with new certificate. What you need is to ensure that there is nowhere used old azurewebsites.net links. Go to in Ghost admin and on Design tab change all navigation links to your new domain. In Azure portal change App Setting called <code>url</code> to new domain. That would be it.</p><h2 id="certificate-renewal">Certificate renewal</h2><p>In the GooRoo article is section 5 about certificate renewal. You should check the WebJob being created and running. In my case I saw warning about Cron:</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://objectoriented.cz/content/images/2019/09/image.png" class="kg-image"></figure><!--kg-card-end: image--><p>To setup Always on, go to App Settings -&gt; General Settings and there you can find a knob Always on:</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://objectoriented.cz/content/images/2019/09/image-3.png" class="kg-image"></figure><!--kg-card-end: image--><p>That's it.</p><p>P.S.: The password for Let's Encrypt application will expire in one year. I expect you would be interested in renewal. Please read <a href="https://blog.rassie.dk/2019/08/update-azure-active-directory-service-principal-credentials/">https://blog.rassie.dk/2019/08/update-azure-active-directory-service-principal-credentials/</a> and store generated password in letsencrypt:ClientSecret application setting.</p><p>P.S.2: 1.0.5+ Let's Encrypt extension application require two new connection strings: <a href="https://github.com/sjkp/letsencrypt-siteextension/issues/354">1.0.5 DashboardConnectionString and StorageConnectionString not documented · Issue #354 · sjkp/letsencrypt-siteextension · GitHub</a>. When you are running this app, just copy paste the storage account string into the two fields and check the checkbox under them (Update Application Settings and Virtual Directory).</p><p>P.S.3: Azure team is working on free certificates, see: <a href="https://azure.microsoft.com/en-us/updates/secure-your-custom-domains-at-no-cost-with-app-service-managed-certificates-preview/">Secure your Custom Domains at no cost with App Service Managed Certificates (preview) | Azure updates | Microsoft Azure</a></p>]]></content:encoded></item><item><title><![CDATA[Programming ATtiny 85]]></title><description><![CDATA[ATtiny 85 is a tiny processor which you can use in power restricted applications, unfortunately it doesn't come with USB port so programming is a bit tricky.]]></description><link>https://objectoriented.cz/programming-attiny-85/</link><guid isPermaLink="false">5d71670e41789d363c5bc21d</guid><dc:creator><![CDATA[Michal Aichinger]]></dc:creator><pubDate>Tue, 12 Apr 2016 20:45:00 GMT</pubDate><content:encoded><![CDATA[<p>ATtiny 85 is tiny processor which has only 8 pins, no USB although boards have USB port to power it and communicate with it. How can we deal with this real micro processor?</p>

<h2 id="chiponly">Chip only</h2>

<p>If you have a chip only without any board you would have a programmer to burn your code in. The most easy way is to use your Arduino UNO board:</p>

<!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption">
<img src="https://objectoriented.cz/content/images/2016/04/arduino-isp-attiny.jpg" class="kg-image">
<figcaption>ATtiny 85 and Arduino UNO as ISP</figcaption></figure><!--kg-card-end: image-->


<p>Where these pins are connected: </p>

<ul>
<li>ATtiny Pin 1 to Arduino Pin 10</li>
<li>ATtiny Pin 5 to Arduino Pin 11</li>
<li>ATtiny Pin 6 to Arduino Pin 12</li>
<li>ATtiny Pin 7 to Arduino Pin 13</li>
</ul>

<p>The capacitor between ground and RESET is 10µF.</p>

<p>or Leonardo: </p>

<!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption">
<img src="https://objectoriented.cz/content/images/2016/04/leo_attiny851.png" class="kg-image">
<figcaption>ATtiny 85 and Arduino Leonardo as ISP</figcaption></figure><!--kg-card-end: image-->

<!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption">
<img src="https://objectoriented.cz/content/images/2016/04/FR9T9HRH3XML7BK-MEDIUM.jpg" class="kg-image">
<figcaption>Leonardo pinout from http://www.instructables.com/id/Step-by-Step-Guide-to-the-Arduino-Leonardo/</figcaption></figure><!--kg-card-end: image-->


<h3 id="burningprogramtoattiny85">Burning program to ATtiny 85</h3>

<p>First upload the ArduinoISP example code to your Arduino. Dont't connect the capacitor and ATtiny yet.</p>

<h3 id="preparingarduinoideforattiny85">Preparing Arduino IDE for ATtiny 85</h3>

<p>You must have Arduino IDE version >= 1.6.4 to be able add another board layouts. Then you can in preferences dialog add a new URLs in <em>Additional Boards Manager URLs</em>. These URLs are comma separated list. For ATtiny you can use <a href="https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json">https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package<em>damellis</em>attiny<em>index.json</em></a> or <a href="http://digistump.com/package_digistump_index.json">http://digistump.com/packagedigistump_index.json</a> for Digispark ATtiny boards with USB (see bellow).</p>

<p>Open <em>Boards Manager</em> in <em>Board</em> menu and pick ATtiny to install.</p>

<p>Next step is to connect the capacitor and ATtiny. Open Blink example code and change pin from 13 to 3. </p>

<ul>
<li>Select ATtiny</li>
<li>Select 1MHz</li>
<li>Leave serial port as is</li>
<li>Select Tools -> Programmer -> Arduino as ISP</li>
<li>Connecting LED with resistor to pin 2 => would blink. </li>
</ul>

<p>From <a href="http://www.ernstc.dk/arduino/attiny85.html">http://www.ernstc.dk/arduino/attiny85.html</a>.</p>

<h2 id="boardwithusb">Board with USB</h2>

<!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption">
<img src="https://objectoriented.cz/content/images/2016/04/_vyr_334attiny85microusb_01.jpg" class="kg-image">
<figcaption>Digispark ATtiny 85</figcaption></figure><!--kg-card-end: image-->

<p>These boards are easier to program but don't expect classic USB port.</p>

<p>Next time we will focus on:<br>
<ul>
<li> USB-k drivers</li>
<li> Windows 10 vs Mac</li>
<li> setup ARduino IDE</li>
<li> micronucleus</li>
<li> example of volume knob</li>
</ul></p>]]></content:encoded></item><item><title><![CDATA[Using SIM900A in Europe]]></title><description><![CDATA[What to do when you buy SIM900 module in Europe and get SIM900A.]]></description><link>https://objectoriented.cz/using-sim900a-in-europe/</link><guid isPermaLink="false">5d71667a41789d363c5bc214</guid><dc:creator><![CDATA[Michal Aichinger]]></dc:creator><pubDate>Sun, 05 Apr 2015 20:42:00 GMT</pubDate><content:encoded><![CDATA[<p>When you are building independent device connected to internet you should consider to connect over GSM when there is no Wi-Fi. I did the same and choosed SIM900 module but unfortunatelly bought SIM900A.</p>

<p>They wrote it is working in 900 / 1800 MHz networks (compared to 850 / 900 / 1800 / 1900 MHz for SIM900) which is what we use here in Europe. What I missed was information that it is locked to these regions: China, India, Singapore, Malaysia, Thailand, Indonesia, Cambodia, Vietnam, Laos, Burma, Brunei, Philippines and East Timor. Thanks to <a href="http://www.blog.zapro.dk/?p=368">Per Jensen's blog post</a> about that.</p>

<p>I thought I have a brick but fortunatelly there were rummors about flashing SIM900 firmware to remove country lock.</p>

<!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption">
<img src="https://objectoriented.cz/content/images/2015/04/SIM900.jpg" class="kg-image">
<figcaption>SIM900A module</figcaption></figure><!--kg-card-end: image-->

<h2 id="communicatingwithsim900aminimodule">Communicating with SIM900A Mini module</h2>

<p>This module provide two ways how to communicate: RS232 and TTL level pins. I got in package also TTL to USB level convertor with CP2102 chipset.</p>

<!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"> 
<img src="https://objectoriented.cz/content/images/2015/04/cp2102.jpg" class="kg-image">
<figcaption>CP2102 TTL to USB convertor</figcaption></figure><!--kg-card-end: image-->


<h3 id="rs232">RS232</h3>

<p>RS232 interface is placed under SIM Card slot and it's pins are named by pins to connect to in DB-9 connector:</p>

<ul>
<li>DB9-2 to 2nd pin</li>
<li>DB9-3 to 3rd pin</li>
<li>GND to 5th pin</li>
</ul>

<!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"> 
<img src="https://objectoriented.cz/content/images/2015/04/rs232.jpg" class="kg-image">
<figcaption>RS232</figcaption></figure><!--kg-card-end: image-->

<p>I started with this connector because it was clearly described how to connect to this port and I had also Serial - USB cable. Problem was that flashing software wasn't able to flash firmware. I am suspitious that it was because MAX232 convertor.</p>

<h3 id="ttl">TTL</h3>

<p>I wasn't sure how to connect delivered convertor to the board because seller description was ambiguous because he provided this table</p>

<!--kg-card-begin: html-->
<table>  
<tr><th>MCU</th><th>SIM900A MOULE</th></tr>  
<tr><td>TXD</td><td>5VR</td></tr>  
<tr><td>RXD</td><td>5VT</td></tr>  
<tr><td>DC</td><td>VCC_MCU</td></tr>  
<tr><td>GND</td><td>GND</td></tr>  
<tr><td>POWER(4.6-5.2v)</td><td>VCC5</td></tr>  
</table>
<!--kg-card-end: html-->

<p>and description:</p>

<blockquote>
  <p>Use the TTL interface connect with a MCU</p>
  
  <p>MCU -> SIM900A MOULE
  TXD -> 5VR <br>
  RXD -> 5VT <br>
  GND GND</p>
  
  <p>Notice that: </p>
  
  <ol>
  <li>The pin of VCC_MCU is used for compatible the TTL interface. When the high level of the MCU is 5v like the 51 MCU, we should connect the DC5V to VCC_MCU, when controller is 3.3V like the stm32 MCU, the VCC_MCU should connect the DC3.3V.</li>
  <li>The 3VR 3VT pins are reserved for future. </li>
  </ol>
</blockquote>

<p>Problem was that the board has pins described below and connection as mentioned above didn't work.</p>

<!--kg-card-begin: html-->
<table>  
<tr><td>3VR</td><td>3VT</td></tr>  
<tr><td>5VR</td><td>5VT</td></tr>  
<tr><td>GND</td><td>VCC_MCU</td></tr>  
</table>
<!--kg-card-end: html-->

<p><strong>So what to connect where?</strong>
On one page I found some info about flahsing but what was more important also a image how to connect the TTL convertor. </p>

<!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"> 
<img src="https://objectoriented.cz/content/images/2015/04/sim900ttl.jpg" class="kg-image">
<figcaption>How to connect TTL convertor</figcaption></figure><!--kg-card-end: image-->

<p>My setup was:  </p>

<!--kg-card-begin: html-->
<table>  
<tr><th>Convertor</th><th>SIM900A</th></tr>  
<tr><td>TX</td><td>3VR</td></tr>  
<tr><td>RX</td><td>3VT</td></tr>  
<tr><td>GND</td><td>GND</td></tr>  
</table>
<!--kg-card-end: html-->

<p>Finaly I was able to connect to it:</p>

<!--kg-card-begin: code--><pre><code>
&gt;AT
OK
</code></pre><!--kg-card-end: code-->

<p>Important is to use as first command capital letters because they are used by module to determine a communication speed.</p>

<h2 id="firmwareflashing">Firmware flashing</h2>

<p>We need two pieces, firmware and flasher. You can download flasher from page <a href="http://www.geekonfire.com/wiki/index.php?title=GPRS_Shield%EF%BC%88SIM900%EF%BC%89_Firmware_Update">Geekonfire.com</a>, see step 1.</p>

<p>You need also firmware. There is page of <a href="http://dostmuhammad.com/blog/a-collection-of-firmwares-app-notes-and-guides-for-simcom/">Dost Shah</a> where he collects all available firmwares.</p>

<p>How to pick a right firmware? Fist run command</p>

<!--kg-card-begin: code--><pre><code>
&gt;at+cgmr
Revision:1137B01SIM900A64_ST_MMS
OK</code></pre><!--kg-card-end: code-->

<p>to know which firmware you have in. Most important is that there is SIM900A firmware and it's size is 64bit. If you have in only 32bit you are doomed because all SIM900 firmwares are 64bit.</p>

<p>Regarding page <a href="http://amichalec.net/2014/08/sim900a-fixed-for-europe/">http://amichalec.net/2014/08/sim900a-fixed-for-europe/</a> you can follow these steps:</p>

<ol>
<li>Power up your SIM900A module to respond to AT commands in auto-baud mode (AT+IPR=0).  </li>
<li>Setup flashing tool — connect it to SIM900A, set default speed of 460800 baud, choose firmware to flash from unpacked RAR file, select “don’t check file name” check-box and press “start download” button to see “Power On/Reset Target” message.  </li>
<li>Short NRESET (pin 16) to GND for a moment. Right after it reboots flashing tool will start pushing data.  </li>
<li>When flashing ends with “Download complete” power off SIM900A module. Note that reset will not work, disconnect power line and start power-on sequence once again.</li>
</ol>

<p>Step 3 means that you can put jump wire to <strong>RST</strong> hole and for a fraction of second to short it to <strong>GND</strong>. See <a href="http://www.instructables.com/id/Using-a-SIM900A-GSMGPRS-module-in-Australia/?lang=zh&amp;ALLSTEPS">instrctables.com</a> but no soldering is needed.</p>

<p>After flashing and restart <code>at+cgmr</code> command can show you that there is SIM900 firmware loaded in.</p>

<h2 id="testingbasicfunctionality">Testing basic functionality</h2>

<p>When you have everything prepared you can try to use online <a href="http://m2msupport.net/m2msupport/module-tester/">Java applet</a> to test your modem.</p>

<p>If you don't want to run Java applet you can try to send SMS which is quite simple:</p>

<!--kg-card-begin: code--><pre><code>
&gt;AT+CMGF=1                   // sending in text format
at+cmgs="+xxxxxxxxx"         // phone number <br>
text of SMS <br>
1A                           // CTRL+Z in HEX format <br>
</code></pre><!--kg-card-end: code-->

<p>
<strong>Done.</strong>
I would like to warn you that these steps worked for me and your conditions could be different and you must find your own solution. I am not responsible for what you are doing and if you bricked or burned your device.</p>]]></content:encoded></item></channel></rss>