<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Smart Home Automation Forum - Portal]]></title>
		<link>https://www.kincony.com/forum/</link>
		<description><![CDATA[Smart Home Automation Forum - https://www.kincony.com/forum]]></description>
		<pubDate>Fri, 30 Oct 2026 20:53:09 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[B32M And new ESPHOME Builder DS18B20]]></title>
			<link>https://www.kincony.com/forum/showthread.php?tid=9924</link>
			<pubDate>Thu, 29 Oct 2026 20:07:09 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://www.kincony.com/forum/member.php?action=profile&uid=6959">Verresen</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.kincony.com/forum/showthread.php?tid=9924</guid>
			<description><![CDATA[installing B32M With ne new ESPHome Builder . installed a B32m with the New ESPHome Builder , it's very easy . but now i want to at DS18B20 Sensor to it . but i can't change the Code ? the Free GPIO Pins i can't use , with the new ESPHome Builder .<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10680" target="_blank" title="">Schermafbeelding 2026-10-29 125507.png</a> (Size: 336.35 KB / Downloads: 13)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[installing B32M With ne new ESPHome Builder . installed a B32m with the New ESPHome Builder , it's very easy . but now i want to at DS18B20 Sensor to it . but i can't change the Code ? the Free GPIO Pins i can't use , with the new ESPHome Builder .<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10680" target="_blank" title="">Schermafbeelding 2026-10-29 125507.png</a> (Size: 336.35 KB / Downloads: 13)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[arduino code examples for T16M]-02 Read digital input ports state by 9555 chip]]></title>
			<link>https://www.kincony.com/forum/showthread.php?tid=9921</link>
			<pubDate>Thu, 29 Oct 2026 16:42:59 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://www.kincony.com/forum/member.php?action=profile&uid=1">admin</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.kincony.com/forum/showthread.php?tid=9921</guid>
			<description><![CDATA[<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>/*<br />
 * Made by KinCony IoT: https://www.kincony.com<br />
 *<br />
 * Description:<br />
 * This Arduino program reads 16 digital inputs from an XL9555<br />
 * I/O expander using the PCA95x5 library.<br />
 *<br />
 * Input states are printed as a fixed-width 16-bit binary value:<br />
 * - Leftmost bit:  CH16 (port 15)<br />
 * - Rightmost bit: CH1  (port 0)<br />
 * - 0 = ON<br />
 * - 1 = OFF<br />
 *<br />
 * Pin Definitions:<br />
 * - SDA: GPIO 11<br />
 * - SCL: GPIO 12<br />
 * - XL9555 I2C Address: 0x24<br />
 *<br />
 * Read Interval:<br />
 * - 500 milliseconds<br />
 */<br />
<br />
#include &lt;Arduino.h&gt;<br />
#include &lt;Wire.h&gt;<br />
#include &lt;PCA95x5.h&gt;<br />
<br />
// Define I2C pins and device address.<br />
#define I2C_SDA      11<br />
#define I2C_SCL      12<br />
#define I2C_ADDRESS  0x24<br />
<br />
// Use the PCA9555 driver for the XL9555 I/O expander.<br />
PCA9555 inputIO;<br />
<br />
void setup() {<br />
    Serial.begin(115200);<br />
<br />
    // Initialize I2C: SDA = GPIO11, SCL = GPIO12, clock = 100 kHz.<br />
    Wire.begin(I2C_SDA, I2C_SCL, 100000);<br />
<br />
    // Attach the XL9555 to the I2C bus.<br />
    inputIO.attach(Wire, I2C_ADDRESS);<br />
<br />
    // Read the original input levels without polarity inversion.<br />
    inputIO.polarity(PCA95x5::Polarity::ORIGINAL_ALL);<br />
<br />
    // Configure all 16 ports as inputs.<br />
    inputIO.direction(PCA95x5::Direction::IN_ALL);<br />
<br />
    delay(50);<br />
<br />
    Serial.println("KinCony XL9555 16-channel input test");<br />
    Serial.println("0 = ON, 1 = OFF");<br />
    Serial.println("Bit order: CH16 ... CH1");<br />
}<br />
<br />
void loop() {<br />
    // Read all 16 input ports.<br />
    uint16_t state = inputIO.read();<br />
<br />
    // Print all 16 bits, including leading zeros.<br />
    Serial.print("Input state: ");<br />
<br />
    for (int bit = 15; bit &gt;= 0; bit--) {<br />
        Serial.print((state &gt;&gt; bit) &amp; 0x01);<br />
    }<br />
<br />
    Serial.println();<br />
<br />
    delay(500);<br />
}</code></div></div> arduino ino file download: <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10677" target="_blank" title="">2-digital-input-9555.zip</a> (Size: 992 bytes / Downloads: 4)
<!-- end: postbit_attachments_attachment --><br />
BIN file (you can use esp32 download tool download to ESP32-S3 with address 0x0 then directly to use) download:  <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10678" target="_blank" title="">2-digital-input-9555.ino.merged.zip</a> (Size: 194.18 KB / Downloads: 5)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>/*<br />
 * Made by KinCony IoT: https://www.kincony.com<br />
 *<br />
 * Description:<br />
 * This Arduino program reads 16 digital inputs from an XL9555<br />
 * I/O expander using the PCA95x5 library.<br />
 *<br />
 * Input states are printed as a fixed-width 16-bit binary value:<br />
 * - Leftmost bit:  CH16 (port 15)<br />
 * - Rightmost bit: CH1  (port 0)<br />
 * - 0 = ON<br />
 * - 1 = OFF<br />
 *<br />
 * Pin Definitions:<br />
 * - SDA: GPIO 11<br />
 * - SCL: GPIO 12<br />
 * - XL9555 I2C Address: 0x24<br />
 *<br />
 * Read Interval:<br />
 * - 500 milliseconds<br />
 */<br />
<br />
#include &lt;Arduino.h&gt;<br />
#include &lt;Wire.h&gt;<br />
#include &lt;PCA95x5.h&gt;<br />
<br />
// Define I2C pins and device address.<br />
#define I2C_SDA      11<br />
#define I2C_SCL      12<br />
#define I2C_ADDRESS  0x24<br />
<br />
// Use the PCA9555 driver for the XL9555 I/O expander.<br />
PCA9555 inputIO;<br />
<br />
void setup() {<br />
    Serial.begin(115200);<br />
<br />
    // Initialize I2C: SDA = GPIO11, SCL = GPIO12, clock = 100 kHz.<br />
    Wire.begin(I2C_SDA, I2C_SCL, 100000);<br />
<br />
    // Attach the XL9555 to the I2C bus.<br />
    inputIO.attach(Wire, I2C_ADDRESS);<br />
<br />
    // Read the original input levels without polarity inversion.<br />
    inputIO.polarity(PCA95x5::Polarity::ORIGINAL_ALL);<br />
<br />
    // Configure all 16 ports as inputs.<br />
    inputIO.direction(PCA95x5::Direction::IN_ALL);<br />
<br />
    delay(50);<br />
<br />
    Serial.println("KinCony XL9555 16-channel input test");<br />
    Serial.println("0 = ON, 1 = OFF");<br />
    Serial.println("Bit order: CH16 ... CH1");<br />
}<br />
<br />
void loop() {<br />
    // Read all 16 input ports.<br />
    uint16_t state = inputIO.read();<br />
<br />
    // Print all 16 bits, including leading zeros.<br />
    Serial.print("Input state: ");<br />
<br />
    for (int bit = 15; bit &gt;= 0; bit--) {<br />
        Serial.print((state &gt;&gt; bit) &amp; 0x01);<br />
    }<br />
<br />
    Serial.println();<br />
<br />
    delay(500);<br />
}</code></div></div> arduino ino file download: <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10677" target="_blank" title="">2-digital-input-9555.zip</a> (Size: 992 bytes / Downloads: 4)
<!-- end: postbit_attachments_attachment --><br />
BIN file (you can use esp32 download tool download to ESP32-S3 with address 0x0 then directly to use) download:  <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10678" target="_blank" title="">2-digital-input-9555.ino.merged.zip</a> (Size: 194.18 KB / Downloads: 5)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[arduino code examples for T16M]-01 Turn ON/OFF OUTPUT by 9555 chip]]></title>
			<link>https://www.kincony.com/forum/showthread.php?tid=9920</link>
			<pubDate>Thu, 29 Oct 2026 16:41:16 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://www.kincony.com/forum/member.php?action=profile&uid=1">admin</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.kincony.com/forum/showthread.php?tid=9920</guid>
			<description><![CDATA[<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>/*<br />
 * Made by KinCony IoT: https://www.kincony.com<br />
 *<br />
 * This program controls a 16-channel relay board via an XL9555<br />
 * I/O expander using the PCA95x5 library.<br />
 *<br />
 * It sequentially turns ON all 16 relays, then sequentially<br />
 * turns them OFF, repeating continuously.<br />
 *<br />
 * Pin Definitions:<br />
 * - SDA: GPIO 11<br />
 * - SCL: GPIO 12<br />
 *<br />
 * I2C Address:<br />
 * - XL9555: 0x25<br />
 *<br />
 * Relay Logic:<br />
 * - LOW  = ON<br />
 * - HIGH = OFF<br />
 *<br />
 * Switching Interval:<br />
 * - 200 milliseconds<br />
 */<br />
<br />
#include &lt;Wire.h&gt;<br />
#include &lt;PCA95x5.h&gt;<br />
<br />
#define I2C_SDA_PIN  11<br />
#define I2C_SCL_PIN  12<br />
#define I2C_ADDRESS  0x25<br />
#define DELAY_TIME &nbsp;&nbsp;200<br />
#define RELAY_COUNT  16<br />
<br />
// Use the PCA9555 driver for the XL9555 I/O expander.<br />
PCA9555 relayIO;<br />
<br />
void setup() {<br />
  // Initialize serial communication.<br />
  Serial.begin(115200);<br />
<br />
  // Initialize I2C: SDA = GPIO11, SCL = GPIO12, clock = 100 kHz.<br />
  Wire.begin(I2C_SDA_PIN, I2C_SCL_PIN, 100000);<br />
<br />
  Serial.println("XL9555 Relay Control: Starting...");<br />
<br />
  // Attach the XL9555 to the I2C bus.<br />
  relayIO.attach(Wire, I2C_ADDRESS);<br />
<br />
  // Disable input polarity inversion.<br />
  relayIO.polarity(PCA95x5::Polarity::ORIGINAL_ALL);<br />
<br />
  // Preload all output latches HIGH before enabling outputs.<br />
  // HIGH keeps the active-low relays OFF.<br />
  relayIO.write(PCA95x5::Level::H_ALL);<br />
<br />
  // Configure all 16 ports as outputs.<br />
  relayIO.direction(PCA95x5::Direction::OUT_ALL);<br />
<br />
  delay(50);<br />
<br />
  Serial.println("All relays initialized to OFF.");<br />
}<br />
<br />
void loop() {<br />
  // Sequentially turn ON relays 1-16.<br />
  for (int i = 0; i &lt; RELAY_COUNT; i++) {<br />
    relayIO.write(<br />
      (PCA95x5::Port::Port)i,<br />
      PCA95x5::Level::L<br />
    );<br />
<br />
    Serial.print("Relay ");<br />
    Serial.print(i + 1);<br />
    Serial.println(" ON");<br />
<br />
    delay(DELAY_TIME);<br />
  }<br />
<br />
  // Sequentially turn OFF relays 1-16.<br />
  for (int i = 0; i &lt; RELAY_COUNT; i++) {<br />
    relayIO.write(<br />
      (PCA95x5::Port::Port)i,<br />
      PCA95x5::Level::H<br />
    );<br />
<br />
    Serial.print("Relay ");<br />
    Serial.print(i + 1);<br />
    Serial.println(" OFF");<br />
<br />
    delay(DELAY_TIME);<br />
  }<br />
}</code></div></div> arduino ino file download: <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10675" target="_blank" title="">1-output-9555.zip</a> (Size: 1,016 bytes / Downloads: 9)
<!-- end: postbit_attachments_attachment --><br />
BIN file (you can use esp32 download tool download to ESP32-S3 with address 0x0 then directly to use) download: <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10676" target="_blank" title="">1-output-9555.ino.merged.zip</a> (Size: 194.16 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>/*<br />
 * Made by KinCony IoT: https://www.kincony.com<br />
 *<br />
 * This program controls a 16-channel relay board via an XL9555<br />
 * I/O expander using the PCA95x5 library.<br />
 *<br />
 * It sequentially turns ON all 16 relays, then sequentially<br />
 * turns them OFF, repeating continuously.<br />
 *<br />
 * Pin Definitions:<br />
 * - SDA: GPIO 11<br />
 * - SCL: GPIO 12<br />
 *<br />
 * I2C Address:<br />
 * - XL9555: 0x25<br />
 *<br />
 * Relay Logic:<br />
 * - LOW  = ON<br />
 * - HIGH = OFF<br />
 *<br />
 * Switching Interval:<br />
 * - 200 milliseconds<br />
 */<br />
<br />
#include &lt;Wire.h&gt;<br />
#include &lt;PCA95x5.h&gt;<br />
<br />
#define I2C_SDA_PIN  11<br />
#define I2C_SCL_PIN  12<br />
#define I2C_ADDRESS  0x25<br />
#define DELAY_TIME &nbsp;&nbsp;200<br />
#define RELAY_COUNT  16<br />
<br />
// Use the PCA9555 driver for the XL9555 I/O expander.<br />
PCA9555 relayIO;<br />
<br />
void setup() {<br />
  // Initialize serial communication.<br />
  Serial.begin(115200);<br />
<br />
  // Initialize I2C: SDA = GPIO11, SCL = GPIO12, clock = 100 kHz.<br />
  Wire.begin(I2C_SDA_PIN, I2C_SCL_PIN, 100000);<br />
<br />
  Serial.println("XL9555 Relay Control: Starting...");<br />
<br />
  // Attach the XL9555 to the I2C bus.<br />
  relayIO.attach(Wire, I2C_ADDRESS);<br />
<br />
  // Disable input polarity inversion.<br />
  relayIO.polarity(PCA95x5::Polarity::ORIGINAL_ALL);<br />
<br />
  // Preload all output latches HIGH before enabling outputs.<br />
  // HIGH keeps the active-low relays OFF.<br />
  relayIO.write(PCA95x5::Level::H_ALL);<br />
<br />
  // Configure all 16 ports as outputs.<br />
  relayIO.direction(PCA95x5::Direction::OUT_ALL);<br />
<br />
  delay(50);<br />
<br />
  Serial.println("All relays initialized to OFF.");<br />
}<br />
<br />
void loop() {<br />
  // Sequentially turn ON relays 1-16.<br />
  for (int i = 0; i &lt; RELAY_COUNT; i++) {<br />
    relayIO.write(<br />
      (PCA95x5::Port::Port)i,<br />
      PCA95x5::Level::L<br />
    );<br />
<br />
    Serial.print("Relay ");<br />
    Serial.print(i + 1);<br />
    Serial.println(" ON");<br />
<br />
    delay(DELAY_TIME);<br />
  }<br />
<br />
  // Sequentially turn OFF relays 1-16.<br />
  for (int i = 0; i &lt; RELAY_COUNT; i++) {<br />
    relayIO.write(<br />
      (PCA95x5::Port::Port)i,<br />
      PCA95x5::Level::H<br />
    );<br />
<br />
    Serial.print("Relay ");<br />
    Serial.print(i + 1);<br />
    Serial.println(" OFF");<br />
<br />
    delay(DELAY_TIME);<br />
  }<br />
}</code></div></div> arduino ino file download: <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10675" target="_blank" title="">1-output-9555.zip</a> (Size: 1,016 bytes / Downloads: 9)
<!-- end: postbit_attachments_attachment --><br />
BIN file (you can use esp32 download tool download to ESP32-S3 with address 0x0 then directly to use) download: <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10676" target="_blank" title="">1-output-9555.ino.merged.zip</a> (Size: 194.16 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[B8 – Defective screw terminals and compatible 8-pin pluggable terminal]]></title>
			<link>https://www.kincony.com/forum/showthread.php?tid=9919</link>
			<pubDate>Wed, 28 Oct 2026 20:18:59 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://www.kincony.com/forum/member.php?action=profile&uid=12228">chrisbati</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.kincony.com/forum/showthread.php?tid=9919</guid>
			<description><![CDATA[Hello,<br />
<br />
I recently purchased a <span style="font-weight: bold;" class="mycode_b">KinCony B8 Smart Controller</span> and I'm experiencing a problem with the green screw terminal blocks used for the relay outputs (KA1–KA8 / KB1–KB8).<br />
When tightening a wire, the screw initially starts to grip, but the wire is not yet securely held. If I tighten it slightly more, the screw suddenly loses its grip and spins freely without tightening the wire anymore.<br />
<br />
I have already experienced this problem on several terminals out of the five I have tested.<br />
<br />
Since these terminals will be used to control <span style="font-weight: bold;" class="mycode_b">230 V AC lighting circuits</span>, I don't want to risk loose connections or overheating.<br />
<br />
I would appreciate your advice on the following questions:<br />
<ol type="1" class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Is this a known issue with the KinCony B8 terminal blocks?</span> Is there a recommended solution?<br />
</li>
<li>Are the KA/KB terminal blocks soldered directly to the PCB, or can they be removed and replaced without soldering?<br />
</li>
<li>Is it possible to replace them with <span style="font-weight: bold;" class="mycode_b">8-pin pluggable screw terminal blocks</span>, so that the wiring can be disconnected more easily?<br />
</li>
<li>If so, could you provide the <span style="font-weight: bold;" class="mycode_b">exact compatible part number</span>, including the pitch (5.0 mm, 5.08 mm or another size), and where I can purchase these connectors?<br />
</li>
<li>If replacement requires soldering, is there another solution, such as obtaining a replacement board or having the unit replaced under warranty?<br />
</li>
</ol>
<span style="font-weight: bold;" class="mycode_b"><br />
<br />
Please note that I have no electronics or soldering experience.</span> I am comfortable with electrical wiring, but I cannot modify or solder components on a PCB myself.<br />
Ideally, I am looking for a simple, safe and reliable solution that does not require any electronics work.<br />
<br />
Thank you in advance for your help!]]></description>
			<content:encoded><![CDATA[Hello,<br />
<br />
I recently purchased a <span style="font-weight: bold;" class="mycode_b">KinCony B8 Smart Controller</span> and I'm experiencing a problem with the green screw terminal blocks used for the relay outputs (KA1–KA8 / KB1–KB8).<br />
When tightening a wire, the screw initially starts to grip, but the wire is not yet securely held. If I tighten it slightly more, the screw suddenly loses its grip and spins freely without tightening the wire anymore.<br />
<br />
I have already experienced this problem on several terminals out of the five I have tested.<br />
<br />
Since these terminals will be used to control <span style="font-weight: bold;" class="mycode_b">230 V AC lighting circuits</span>, I don't want to risk loose connections or overheating.<br />
<br />
I would appreciate your advice on the following questions:<br />
<ol type="1" class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Is this a known issue with the KinCony B8 terminal blocks?</span> Is there a recommended solution?<br />
</li>
<li>Are the KA/KB terminal blocks soldered directly to the PCB, or can they be removed and replaced without soldering?<br />
</li>
<li>Is it possible to replace them with <span style="font-weight: bold;" class="mycode_b">8-pin pluggable screw terminal blocks</span>, so that the wiring can be disconnected more easily?<br />
</li>
<li>If so, could you provide the <span style="font-weight: bold;" class="mycode_b">exact compatible part number</span>, including the pitch (5.0 mm, 5.08 mm or another size), and where I can purchase these connectors?<br />
</li>
<li>If replacement requires soldering, is there another solution, such as obtaining a replacement board or having the unit replaced under warranty?<br />
</li>
</ol>
<span style="font-weight: bold;" class="mycode_b"><br />
<br />
Please note that I have no electronics or soldering experience.</span> I am comfortable with electrical wiring, but I cannot modify or solder components on a PCB myself.<br />
Ideally, I am looking for a simple, safe and reliable solution that does not require any electronics work.<br />
<br />
Thank you in advance for your help!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[arduino code examples for B2]-13 voice call to mobile phone by SIM7600]]></title>
			<link>https://www.kincony.com/forum/showthread.php?tid=9917</link>
			<pubDate>Wed, 28 Oct 2026 08:53:02 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://www.kincony.com/forum/member.php?action=profile&uid=1">admin</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.kincony.com/forum/showthread.php?tid=9917</guid>
			<description><![CDATA[<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>/*<br />
 * Made by KinCony IoT: https://www.kincony.com<br />
 *<br />
 * Make a voice call using SIM7600 AT commands.<br />
 * SIM7600 RXD -&gt; ESP32 GPIO16 (TX)<br />
 * SIM7600 TXD -&gt; ESP32 GPIO15 (RX)<br />
 */<br />
<br />
#include &lt;Arduino.h&gt;<br />
<br />
HardwareSerial modem(2);<br />
<br />
constexpr int MODEM_RX = 15;<br />
constexpr int MODEM_TX = 16;<br />
constexpr uint32_t MODEM_BAUD = 115200;<br />
<br />
// Time from starting the call until automatic hang-up.<br />
constexpr uint32_t CALL_DURATION_MS = 30000;<br />
<br />
const char PHONE_NUMBER[] = "+8615381188302";<br />
<br />
bool waitFor(const char *expected, uint32_t timeoutMs) {<br />
  String response;<br />
  uint32_t start = millis();<br />
<br />
  while (millis() - start &lt; timeoutMs) {<br />
    while (modem.available()) {<br />
      char c = modem.read();<br />
      Serial.write(c);<br />
      response += c;<br />
<br />
      if (response.indexOf(expected) &gt;= 0) {<br />
        return true;<br />
      }<br />
<br />
      if (response.indexOf("ERROR") &gt;= 0 ||<br />
          response.indexOf("NO CARRIER") &gt;= 0 ||<br />
          response.indexOf("BUSY") &gt;= 0 ||<br />
          response.indexOf("NO ANSWER") &gt;= 0) {<br />
        return false;<br />
      }<br />
    }<br />
    delay(1);<br />
  }<br />
<br />
  Serial.println("&#92;n[Timeout]");<br />
  return false;<br />
}<br />
<br />
bool sendAT(const String &amp;command,<br />
            const char *expected = "OK",<br />
            uint32_t timeoutMs = 3000) {<br />
  while (modem.available()) {<br />
    Serial.write(modem.read());<br />
  }<br />
<br />
  Serial.print("&#92;n&gt;&gt; ");<br />
  Serial.println(command);<br />
<br />
  modem.print(command);<br />
  modem.print('&#92;r');<br />
<br />
  return waitFor(expected, timeoutMs);<br />
}<br />
<br />
void setup() {<br />
  Serial.begin(115200);<br />
  modem.begin(MODEM_BAUD, SERIAL_8N1, MODEM_RX, MODEM_TX);<br />
<br />
  Serial.println("&#92;nWaiting for SIM7600...");<br />
  delay(15000);<br />
<br />
  bool modemReady = false;<br />
<br />
  for (int i = 0; i &lt; 10; i++) {<br />
    if (sendAT("AT")) {<br />
      modemReady = true;<br />
      break;<br />
    }<br />
    delay(1000);<br />
  }<br />
<br />
  if (!modemReady) {<br />
    Serial.println("No modem response. Check power, baud rate and UART pins.");<br />
    return;<br />
  }<br />
<br />
  if (!sendAT("ATE0")) return;<br />
<br />
  if (!sendAT("AT+CPIN?", "+CPIN: READY")) {<br />
    Serial.println("SIM card is not ready.");<br />
    return;<br />
  }<br />
<br />
  // Print signal strength and network registration status.<br />
  sendAT("AT+CSQ");<br />
  sendAT("AT+CREG?");<br />
  sendAT("AT+CEREG?");<br />
<br />
  // A trailing semicolon requests a voice call.<br />
  String dialCommand = String("ATD") + PHONE_NUMBER + ";";<br />
<br />
  Serial.println("&#92;nDialing...");<br />
<br />
  uint32_t callStart = millis();<br />
<br />
  if (!sendAT(dialCommand, "OK", 10000)) {<br />
    Serial.println("&#92;nDial command failed or timed out.");<br />
    sendAT("ATH");<br />
    return;<br />
  }<br />
<br />
  Serial.println("&#92;nDial command accepted; waiting for call events.");<br />
<br />
  String line;<br />
  bool callEnded = false;<br />
<br />
  while (millis() - callStart &lt; CALL_DURATION_MS &amp;&amp; !callEnded) {<br />
    while (modem.available()) {<br />
      char c = modem.read();<br />
      Serial.write(c);<br />
<br />
      if (c == '&#92;n') {<br />
        line.trim();<br />
<br />
        if (line == "NO CARRIER" ||<br />
            line == "BUSY" ||<br />
            line == "NO ANSWER" ||<br />
            line == "ERROR") {<br />
          callEnded = true;<br />
        }<br />
<br />
        line = "";<br />
      } else if (c != '&#92;r') {<br />
        line += c;<br />
      }<br />
    }<br />
    delay(1);<br />
  }<br />
<br />
  if (callEnded) {<br />
    Serial.println("&#92;nCall ended.");<br />
  } else {<br />
    Serial.println("&#92;nHanging up...");<br />
    sendAT("ATH");<br />
  }<br />
}<br />
<br />
void loop() {<br />
  // UART bridge for manual AT-command debugging.<br />
  while (modem.available()) {<br />
    Serial.write(modem.read());<br />
  }<br />
<br />
  while (Serial.available()) {<br />
    modem.write(Serial.read());<br />
  }<br />
}</code></div></div><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10674" target="_blank" title="">B2-sim7600-voice.jpg</a> (Size: 156.72 KB / Downloads: 9)
<!-- end: postbit_attachments_attachment --><br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10673" target="_blank" title="">sim7600-call.png</a> (Size: 61.96 KB / Downloads: 10)
<!-- end: postbit_attachments_attachment --><br />
arduino ino file download: <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10671" target="_blank" title="">13-4G-call.zip</a> (Size: 1.36 KB / Downloads: 9)
<!-- end: postbit_attachments_attachment --><br />
BIN file (you can use esp32 download tool download to ESP32-S3 with address 0x0 then directly to use) download: <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10672" target="_blank" title="">13-4G-call.ino.merged.zip</a> (Size: 187.34 KB / Downloads: 12)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>/*<br />
 * Made by KinCony IoT: https://www.kincony.com<br />
 *<br />
 * Make a voice call using SIM7600 AT commands.<br />
 * SIM7600 RXD -&gt; ESP32 GPIO16 (TX)<br />
 * SIM7600 TXD -&gt; ESP32 GPIO15 (RX)<br />
 */<br />
<br />
#include &lt;Arduino.h&gt;<br />
<br />
HardwareSerial modem(2);<br />
<br />
constexpr int MODEM_RX = 15;<br />
constexpr int MODEM_TX = 16;<br />
constexpr uint32_t MODEM_BAUD = 115200;<br />
<br />
// Time from starting the call until automatic hang-up.<br />
constexpr uint32_t CALL_DURATION_MS = 30000;<br />
<br />
const char PHONE_NUMBER[] = "+8615381188302";<br />
<br />
bool waitFor(const char *expected, uint32_t timeoutMs) {<br />
  String response;<br />
  uint32_t start = millis();<br />
<br />
  while (millis() - start &lt; timeoutMs) {<br />
    while (modem.available()) {<br />
      char c = modem.read();<br />
      Serial.write(c);<br />
      response += c;<br />
<br />
      if (response.indexOf(expected) &gt;= 0) {<br />
        return true;<br />
      }<br />
<br />
      if (response.indexOf("ERROR") &gt;= 0 ||<br />
          response.indexOf("NO CARRIER") &gt;= 0 ||<br />
          response.indexOf("BUSY") &gt;= 0 ||<br />
          response.indexOf("NO ANSWER") &gt;= 0) {<br />
        return false;<br />
      }<br />
    }<br />
    delay(1);<br />
  }<br />
<br />
  Serial.println("&#92;n[Timeout]");<br />
  return false;<br />
}<br />
<br />
bool sendAT(const String &amp;command,<br />
            const char *expected = "OK",<br />
            uint32_t timeoutMs = 3000) {<br />
  while (modem.available()) {<br />
    Serial.write(modem.read());<br />
  }<br />
<br />
  Serial.print("&#92;n&gt;&gt; ");<br />
  Serial.println(command);<br />
<br />
  modem.print(command);<br />
  modem.print('&#92;r');<br />
<br />
  return waitFor(expected, timeoutMs);<br />
}<br />
<br />
void setup() {<br />
  Serial.begin(115200);<br />
  modem.begin(MODEM_BAUD, SERIAL_8N1, MODEM_RX, MODEM_TX);<br />
<br />
  Serial.println("&#92;nWaiting for SIM7600...");<br />
  delay(15000);<br />
<br />
  bool modemReady = false;<br />
<br />
  for (int i = 0; i &lt; 10; i++) {<br />
    if (sendAT("AT")) {<br />
      modemReady = true;<br />
      break;<br />
    }<br />
    delay(1000);<br />
  }<br />
<br />
  if (!modemReady) {<br />
    Serial.println("No modem response. Check power, baud rate and UART pins.");<br />
    return;<br />
  }<br />
<br />
  if (!sendAT("ATE0")) return;<br />
<br />
  if (!sendAT("AT+CPIN?", "+CPIN: READY")) {<br />
    Serial.println("SIM card is not ready.");<br />
    return;<br />
  }<br />
<br />
  // Print signal strength and network registration status.<br />
  sendAT("AT+CSQ");<br />
  sendAT("AT+CREG?");<br />
  sendAT("AT+CEREG?");<br />
<br />
  // A trailing semicolon requests a voice call.<br />
  String dialCommand = String("ATD") + PHONE_NUMBER + ";";<br />
<br />
  Serial.println("&#92;nDialing...");<br />
<br />
  uint32_t callStart = millis();<br />
<br />
  if (!sendAT(dialCommand, "OK", 10000)) {<br />
    Serial.println("&#92;nDial command failed or timed out.");<br />
    sendAT("ATH");<br />
    return;<br />
  }<br />
<br />
  Serial.println("&#92;nDial command accepted; waiting for call events.");<br />
<br />
  String line;<br />
  bool callEnded = false;<br />
<br />
  while (millis() - callStart &lt; CALL_DURATION_MS &amp;&amp; !callEnded) {<br />
    while (modem.available()) {<br />
      char c = modem.read();<br />
      Serial.write(c);<br />
<br />
      if (c == '&#92;n') {<br />
        line.trim();<br />
<br />
        if (line == "NO CARRIER" ||<br />
            line == "BUSY" ||<br />
            line == "NO ANSWER" ||<br />
            line == "ERROR") {<br />
          callEnded = true;<br />
        }<br />
<br />
        line = "";<br />
      } else if (c != '&#92;r') {<br />
        line += c;<br />
      }<br />
    }<br />
    delay(1);<br />
  }<br />
<br />
  if (callEnded) {<br />
    Serial.println("&#92;nCall ended.");<br />
  } else {<br />
    Serial.println("&#92;nHanging up...");<br />
    sendAT("ATH");<br />
  }<br />
}<br />
<br />
void loop() {<br />
  // UART bridge for manual AT-command debugging.<br />
  while (modem.available()) {<br />
    Serial.write(modem.read());<br />
  }<br />
<br />
  while (Serial.available()) {<br />
    modem.write(Serial.read());<br />
  }<br />
}</code></div></div><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10674" target="_blank" title="">B2-sim7600-voice.jpg</a> (Size: 156.72 KB / Downloads: 9)
<!-- end: postbit_attachments_attachment --><br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10673" target="_blank" title="">sim7600-call.png</a> (Size: 61.96 KB / Downloads: 10)
<!-- end: postbit_attachments_attachment --><br />
arduino ino file download: <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10671" target="_blank" title="">13-4G-call.zip</a> (Size: 1.36 KB / Downloads: 9)
<!-- end: postbit_attachments_attachment --><br />
BIN file (you can use esp32 download tool download to ESP32-S3 with address 0x0 then directly to use) download: <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10672" target="_blank" title="">13-4G-call.ino.merged.zip</a> (Size: 187.34 KB / Downloads: 12)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[arduino code examples for B2]-12 send Short Message (SMS) to mobile phone by SIM7600]]></title>
			<link>https://www.kincony.com/forum/showthread.php?tid=9916</link>
			<pubDate>Wed, 28 Oct 2026 08:50:55 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://www.kincony.com/forum/member.php?action=profile&uid=1">admin</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.kincony.com/forum/showthread.php?tid=9916</guid>
			<description><![CDATA[<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>/*<br />
 * Made by KinCony IoT: https://www.kincony.com<br />
 *<br />
 * Send one SMS through SIM7600 using AT commands.<br />
 * SIM7600 RXD -&gt; ESP32 GPIO16 (TX)<br />
 * SIM7600 TXD -&gt; ESP32 GPIO15 (RX)<br />
 */<br />
<br />
#include &lt;Arduino.h&gt;<br />
<br />
HardwareSerial modem(2);<br />
<br />
constexpr int MODEM_RX = 15;<br />
constexpr int MODEM_TX = 16;<br />
constexpr uint32_t MODEM_BAUD = 115200;<br />
<br />
const char PHONE_NUMBER[] = "+8615381188302";<br />
const char SMS_TEXT[] = "kincony";<br />
<br />
// Read modem responses and mirror them to the USB serial port.<br />
bool waitFor(const char *expected, uint32_t timeoutMs) {<br />
  String response;<br />
  uint32_t start = millis();<br />
<br />
  while (millis() - start &lt; timeoutMs) {<br />
    while (modem.available()) {<br />
      char c = modem.read();<br />
      Serial.write(c);<br />
      response += c;<br />
<br />
      if (response.indexOf(expected) &gt;= 0) {<br />
        return true;<br />
      }<br />
<br />
      if (response.indexOf("ERROR") &gt;= 0) {<br />
        return false;<br />
      }<br />
    }<br />
    delay(1);<br />
  }<br />
<br />
  Serial.println("&#92;n[Timeout]");<br />
  return false;<br />
}<br />
<br />
bool sendAT(const String &amp;command,<br />
            const char *expected = "OK",<br />
            uint32_t timeoutMs = 3000) {<br />
  while (modem.available()) {<br />
    Serial.write(modem.read());<br />
  }<br />
<br />
  Serial.print("&#92;n&gt;&gt; ");<br />
  Serial.println(command);<br />
<br />
  modem.print(command);<br />
  modem.print('&#92;r');<br />
<br />
  return waitFor(expected, timeoutMs);<br />
}<br />
<br />
void setup() {<br />
  Serial.begin(115200);<br />
  modem.begin(MODEM_BAUD, SERIAL_8N1, MODEM_RX, MODEM_TX);<br />
<br />
  Serial.println("&#92;nWaiting for SIM7600...");<br />
<br />
  // Allow time for module startup and network registration.<br />
  delay(15000);<br />
<br />
  bool modemReady = false;<br />
  for (int i = 0; i &lt; 10; i++) {<br />
    if (sendAT("AT")) {<br />
      modemReady = true;<br />
      break;<br />
    }<br />
    delay(1000);<br />
  }<br />
<br />
  if (!modemReady) {<br />
    Serial.println("No modem response. Check power, baud rate and UART pins.");<br />
    return;<br />
  }<br />
<br />
  if (!sendAT("ATE0")) return;<br />
  if (!sendAT("AT+CPIN?", "+CPIN: READY")) {<br />
    Serial.println("SIM card is not ready.");<br />
    return;<br />
  }<br />
<br />
  // Print signal strength and registration status for diagnosis.<br />
  sendAT("AT+CSQ");<br />
  sendAT("AT+CREG?");<br />
  sendAT("AT+CEREG?");<br />
<br />
  // Configure SMS text mode and GSM character set.<br />
  if (!sendAT("AT+CMGF=1")) return;<br />
  if (!sendAT("AT+CSCS=&#92;"GSM&#92;"")) return;<br />
<br />
  String command = String("AT+CMGS=&#92;"") + PHONE_NUMBER + "&#92;"";<br />
<br />
  if (!sendAT(command, "&gt;", 10000)) {<br />
    Serial.println("SMS input prompt was not received.");<br />
    return;<br />
  }<br />
<br />
  modem.print(SMS_TEXT);<br />
  modem.write((uint8_t)0x1A);  // Ctrl+Z submits the SMS.<br />
<br />
  // Do not retry automatically: this avoids duplicate messages.<br />
  if (waitFor("+CMGS:", 120000)) {<br />
    Serial.println("&#92;nSMS submitted successfully.");<br />
  } else {<br />
    Serial.println("&#92;nSMS failed or result is unknown. Check modem output.");<br />
  }<br />
}<br />
<br />
void loop() {<br />
  // UART bridge for manual AT-command debugging.<br />
  while (modem.available()) {<br />
    Serial.write(modem.read());<br />
  }<br />
<br />
  while (Serial.available()) {<br />
    modem.write(Serial.read());<br />
  }<br />
}</code></div></div><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10669" target="_blank" title="">B2-4G-SMS.jpg</a> (Size: 150.12 KB / Downloads: 10)
<!-- end: postbit_attachments_attachment --><br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10670" target="_blank" title="">sim7600-sms.png</a> (Size: 59.3 KB / Downloads: 11)
<!-- end: postbit_attachments_attachment --><br />
arduino ino file download: <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10667" target="_blank" title="">12-send-SMS.zip</a> (Size: 1.34 KB / Downloads: 10)
<!-- end: postbit_attachments_attachment --><br />
BIN file (you can use esp32 download tool download to ESP32-S3 with address 0x0 then directly to use) download: <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10668" target="_blank" title="">12-send-SMS.ino.merged.zip</a> (Size: 186.84 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>/*<br />
 * Made by KinCony IoT: https://www.kincony.com<br />
 *<br />
 * Send one SMS through SIM7600 using AT commands.<br />
 * SIM7600 RXD -&gt; ESP32 GPIO16 (TX)<br />
 * SIM7600 TXD -&gt; ESP32 GPIO15 (RX)<br />
 */<br />
<br />
#include &lt;Arduino.h&gt;<br />
<br />
HardwareSerial modem(2);<br />
<br />
constexpr int MODEM_RX = 15;<br />
constexpr int MODEM_TX = 16;<br />
constexpr uint32_t MODEM_BAUD = 115200;<br />
<br />
const char PHONE_NUMBER[] = "+8615381188302";<br />
const char SMS_TEXT[] = "kincony";<br />
<br />
// Read modem responses and mirror them to the USB serial port.<br />
bool waitFor(const char *expected, uint32_t timeoutMs) {<br />
  String response;<br />
  uint32_t start = millis();<br />
<br />
  while (millis() - start &lt; timeoutMs) {<br />
    while (modem.available()) {<br />
      char c = modem.read();<br />
      Serial.write(c);<br />
      response += c;<br />
<br />
      if (response.indexOf(expected) &gt;= 0) {<br />
        return true;<br />
      }<br />
<br />
      if (response.indexOf("ERROR") &gt;= 0) {<br />
        return false;<br />
      }<br />
    }<br />
    delay(1);<br />
  }<br />
<br />
  Serial.println("&#92;n[Timeout]");<br />
  return false;<br />
}<br />
<br />
bool sendAT(const String &amp;command,<br />
            const char *expected = "OK",<br />
            uint32_t timeoutMs = 3000) {<br />
  while (modem.available()) {<br />
    Serial.write(modem.read());<br />
  }<br />
<br />
  Serial.print("&#92;n&gt;&gt; ");<br />
  Serial.println(command);<br />
<br />
  modem.print(command);<br />
  modem.print('&#92;r');<br />
<br />
  return waitFor(expected, timeoutMs);<br />
}<br />
<br />
void setup() {<br />
  Serial.begin(115200);<br />
  modem.begin(MODEM_BAUD, SERIAL_8N1, MODEM_RX, MODEM_TX);<br />
<br />
  Serial.println("&#92;nWaiting for SIM7600...");<br />
<br />
  // Allow time for module startup and network registration.<br />
  delay(15000);<br />
<br />
  bool modemReady = false;<br />
  for (int i = 0; i &lt; 10; i++) {<br />
    if (sendAT("AT")) {<br />
      modemReady = true;<br />
      break;<br />
    }<br />
    delay(1000);<br />
  }<br />
<br />
  if (!modemReady) {<br />
    Serial.println("No modem response. Check power, baud rate and UART pins.");<br />
    return;<br />
  }<br />
<br />
  if (!sendAT("ATE0")) return;<br />
  if (!sendAT("AT+CPIN?", "+CPIN: READY")) {<br />
    Serial.println("SIM card is not ready.");<br />
    return;<br />
  }<br />
<br />
  // Print signal strength and registration status for diagnosis.<br />
  sendAT("AT+CSQ");<br />
  sendAT("AT+CREG?");<br />
  sendAT("AT+CEREG?");<br />
<br />
  // Configure SMS text mode and GSM character set.<br />
  if (!sendAT("AT+CMGF=1")) return;<br />
  if (!sendAT("AT+CSCS=&#92;"GSM&#92;"")) return;<br />
<br />
  String command = String("AT+CMGS=&#92;"") + PHONE_NUMBER + "&#92;"";<br />
<br />
  if (!sendAT(command, "&gt;", 10000)) {<br />
    Serial.println("SMS input prompt was not received.");<br />
    return;<br />
  }<br />
<br />
  modem.print(SMS_TEXT);<br />
  modem.write((uint8_t)0x1A);  // Ctrl+Z submits the SMS.<br />
<br />
  // Do not retry automatically: this avoids duplicate messages.<br />
  if (waitFor("+CMGS:", 120000)) {<br />
    Serial.println("&#92;nSMS submitted successfully.");<br />
  } else {<br />
    Serial.println("&#92;nSMS failed or result is unknown. Check modem output.");<br />
  }<br />
}<br />
<br />
void loop() {<br />
  // UART bridge for manual AT-command debugging.<br />
  while (modem.available()) {<br />
    Serial.write(modem.read());<br />
  }<br />
<br />
  while (Serial.available()) {<br />
    modem.write(Serial.read());<br />
  }<br />
}</code></div></div><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10669" target="_blank" title="">B2-4G-SMS.jpg</a> (Size: 150.12 KB / Downloads: 10)
<!-- end: postbit_attachments_attachment --><br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10670" target="_blank" title="">sim7600-sms.png</a> (Size: 59.3 KB / Downloads: 11)
<!-- end: postbit_attachments_attachment --><br />
arduino ino file download: <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10667" target="_blank" title="">12-send-SMS.zip</a> (Size: 1.34 KB / Downloads: 10)
<!-- end: postbit_attachments_attachment --><br />
BIN file (you can use esp32 download tool download to ESP32-S3 with address 0x0 then directly to use) download: <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10668" target="_blank" title="">12-send-SMS.ino.merged.zip</a> (Size: 186.84 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[KC868-A16 – KCS v2.2.20 MQTT protocol documentation and availability (LWT)]]></title>
			<link>https://www.kincony.com/forum/showthread.php?tid=9915</link>
			<pubDate>Tue, 27 Oct 2026 22:41:27 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://www.kincony.com/forum/member.php?action=profile&uid=3894">tech1977</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.kincony.com/forum/showthread.php?tid=9915</guid>
			<description><![CDATA[Hello KinCony team,<br />
<br />
I am using a KC868-A16 (original ESP32 v1.6, not A16v3) with KCS firmware v2.2.20 (build date Apr 2 2026), integrated into Home Assistant via MQTT (Mosquitto broker). Everything works: I control the outputs with {"outputN":{"value":true/false}} on KC868_A16/&lt;serial&gt;/SET and I read inputs and outputs from KC868_A16/&lt;serial&gt;/STATE.<br />
<br />
I would like to use all the features of the board, so I have a few questions:<br />
<br />
1. Complete MQTT documentation<br />
Could you please send me the latest and complete MQTT protocol document for KCS v2.2.20? I need the full list of topics, commands and payload fields, including outputs, digital inputs, HT1–HT3 inputs, analog inputs (ADC), temperature/humidity sensors, RF 433 MHz, and any other parameter available via MQTT.<br />
<br />
2. Availability / Last Will (LWT)<br />
Does KCS v2 publish an availability or Last Will message (online/offline) when the board connects or disconnects from the broker? If yes, which topic and payload does it use? If not, is it possible to add it in a future firmware version?<br />
<br />
3. Home Assistant MQTT Auto Discovery<br />
Is Home Assistant MQTT auto discovery supported in KCS v2 for the KC868-A16, or only in KCS v3? If it is supported, where can I enable it?<br />
<br />
4. Pulse command with duration<br />
At the moment I use the "delay" output type in the web interface to create a pulse. Is there an MQTT command to send a pulse with a duration specified in the payload (for example "turn on output 5 for 300 ms"), so that the timing can be chosen per command?<br />
<br />
5. Other commands<br />
- Is there a command to request the full current state (refresh/query)?<br />
- Is there a toggle command for outputs?<br />
- Can the board publish its state periodically (heartbeat), and is the interval configurable?<br />
- Are STATE messages published with the retain flag, and can this be configured?<br />
<br />
6. Values for sensors not connected<br />
I see "temperature":-100 and "humidity":-100 for sensors that are not connected. Can you confirm that -100 always means "no sensor"?<br />
<br />
7. Firmware<br />
Is v2.2.20 the latest KCS v2 firmware for the KC868-A16? Is a changelog available?<br />
<br />
If you also have HTTP or TCP protocol documents for KCS v2, I would appreciate them too.]]></description>
			<content:encoded><![CDATA[Hello KinCony team,<br />
<br />
I am using a KC868-A16 (original ESP32 v1.6, not A16v3) with KCS firmware v2.2.20 (build date Apr 2 2026), integrated into Home Assistant via MQTT (Mosquitto broker). Everything works: I control the outputs with {"outputN":{"value":true/false}} on KC868_A16/&lt;serial&gt;/SET and I read inputs and outputs from KC868_A16/&lt;serial&gt;/STATE.<br />
<br />
I would like to use all the features of the board, so I have a few questions:<br />
<br />
1. Complete MQTT documentation<br />
Could you please send me the latest and complete MQTT protocol document for KCS v2.2.20? I need the full list of topics, commands and payload fields, including outputs, digital inputs, HT1–HT3 inputs, analog inputs (ADC), temperature/humidity sensors, RF 433 MHz, and any other parameter available via MQTT.<br />
<br />
2. Availability / Last Will (LWT)<br />
Does KCS v2 publish an availability or Last Will message (online/offline) when the board connects or disconnects from the broker? If yes, which topic and payload does it use? If not, is it possible to add it in a future firmware version?<br />
<br />
3. Home Assistant MQTT Auto Discovery<br />
Is Home Assistant MQTT auto discovery supported in KCS v2 for the KC868-A16, or only in KCS v3? If it is supported, where can I enable it?<br />
<br />
4. Pulse command with duration<br />
At the moment I use the "delay" output type in the web interface to create a pulse. Is there an MQTT command to send a pulse with a duration specified in the payload (for example "turn on output 5 for 300 ms"), so that the timing can be chosen per command?<br />
<br />
5. Other commands<br />
- Is there a command to request the full current state (refresh/query)?<br />
- Is there a toggle command for outputs?<br />
- Can the board publish its state periodically (heartbeat), and is the interval configurable?<br />
- Are STATE messages published with the retain flag, and can this be configured?<br />
<br />
6. Values for sensors not connected<br />
I see "temperature":-100 and "humidity":-100 for sensors that are not connected. Can you confirm that -100 always means "no sensor"?<br />
<br />
7. Firmware<br />
Is v2.2.20 the latest KCS v2 firmware for the KC868-A16? Is a changelog available?<br />
<br />
If you also have HTTP or TCP protocol documents for KCS v2, I would appreciate them too.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[KinCony 3-Wire PT100 Temperature Sensor Wiring Guide]]></title>
			<link>https://www.kincony.com/forum/showthread.php?tid=9913</link>
			<pubDate>Mon, 26 Oct 2026 14:46:44 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://www.kincony.com/forum/member.php?action=profile&uid=1">admin</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.kincony.com/forum/showthread.php?tid=9913</guid>
			<description><![CDATA[<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10665" target="_blank" title="">KinCony 3-Wire-PT100-Wiring-Diagram.png</a> (Size: 1.34 MB / Downloads: 24)
<!-- end: postbit_attachments_attachment --><ul class="mycode_list"><li>Connect the two wires from the same end of the sensing element to the two <span style="font-weight: bold;" class="mycode_b">“+” terminals</span>, one wire to each terminal.<br />
</li>
<li>Connect the remaining wire to the <span style="font-weight: bold;" class="mycode_b">“−” terminal</span>.<br />
</li>
<li>No external power supply is required for the sensor.<br />
</li>
</ul>
The diagram uses <span style="font-weight: bold;" class="mycode_b">two red wires and one white wire</span> as an example. Follow your sensor’s wiring instructions to identify the correct wires.]]></description>
			<content:encoded><![CDATA[<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10665" target="_blank" title="">KinCony 3-Wire-PT100-Wiring-Diagram.png</a> (Size: 1.34 MB / Downloads: 24)
<!-- end: postbit_attachments_attachment --><ul class="mycode_list"><li>Connect the two wires from the same end of the sensing element to the two <span style="font-weight: bold;" class="mycode_b">“+” terminals</span>, one wire to each terminal.<br />
</li>
<li>Connect the remaining wire to the <span style="font-weight: bold;" class="mycode_b">“−” terminal</span>.<br />
</li>
<li>No external power supply is required for the sensor.<br />
</li>
</ul>
The diagram uses <span style="font-weight: bold;" class="mycode_b">two red wires and one white wire</span> as an example. Follow your sensor’s wiring instructions to identify the correct wires.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[KinCony RS485 Wiring Guide: Multiple Modbus RTU Devices with KCS v3]]></title>
			<link>https://www.kincony.com/forum/showthread.php?tid=9912</link>
			<pubDate>Mon, 26 Oct 2026 14:45:26 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://www.kincony.com/forum/member.php?action=profile&uid=1">admin</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.kincony.com/forum/showthread.php?tid=9912</guid>
			<description><![CDATA[<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10664" target="_blank" title="">KinCony-RS485-Multidrop-Sensor-Wiring.png</a> (Size: 1.39 MB / Downloads: 26)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-weight: bold;" class="mycode_b">Connect multiple Modbus RTU devices to a single RS485 port, with KCS v3 acting as the master to poll and read each device.</span><br />
The example includes a temperature sensor, a humidity sensor, and an energy meter, with Modbus addresses <span style="font-weight: bold;" class="mycode_b">1, 2, and 3</span>, respectively. The diagram shows the A/B bus, termination resistors at both ends, and requirements such as unique device addresses and matching serial communication settings.]]></description>
			<content:encoded><![CDATA[<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10664" target="_blank" title="">KinCony-RS485-Multidrop-Sensor-Wiring.png</a> (Size: 1.39 MB / Downloads: 26)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-weight: bold;" class="mycode_b">Connect multiple Modbus RTU devices to a single RS485 port, with KCS v3 acting as the master to poll and read each device.</span><br />
The example includes a temperature sensor, a humidity sensor, and an energy meter, with Modbus addresses <span style="font-weight: bold;" class="mycode_b">1, 2, and 3</span>, respectively. The diagram shows the A/B bus, termination resistors at both ends, and requirements such as unique device addresses and matching serial communication settings.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[KinCony G1 4G Module UART Wiring Guide for SMS and Phone Calls]]></title>
			<link>https://www.kincony.com/forum/showthread.php?tid=9911</link>
			<pubDate>Mon, 26 Oct 2026 14:44:09 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://www.kincony.com/forum/member.php?action=profile&uid=1">admin</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.kincony.com/forum/showthread.php?tid=9911</guid>
			<description><![CDATA[<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10663" target="_blank" title="">KinCony-UART-Wiring-to-G1-4G.png</a> (Size: 1.34 MB / Downloads: 22)
<!-- end: postbit_attachments_attachment --><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Controller TXD → G1 RXD</span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Controller RXD ← G1 TXD</span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">GND → Common ground</span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">G1 requires an external power supply, a SIM card, and a 4G antenna.</span><br />
</li>
</ul>
With compatible firmware, the controller can send and receive SMS messages and dial phone calls. Select available GPIO pins that support UART operation.]]></description>
			<content:encoded><![CDATA[<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.kincony.com/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10663" target="_blank" title="">KinCony-UART-Wiring-to-G1-4G.png</a> (Size: 1.34 MB / Downloads: 22)
<!-- end: postbit_attachments_attachment --><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Controller TXD → G1 RXD</span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Controller RXD ← G1 TXD</span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">GND → Common ground</span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">G1 requires an external power supply, a SIM card, and a 4G antenna.</span><br />
</li>
</ul>
With compatible firmware, the controller can send and receive SMS messages and dial phone calls. Select available GPIO pins that support UART operation.]]></content:encoded>
		</item>
	</channel>
</rss>