Store messages from Mosquitto MQTT broker into SQL Database
I need a server which is able to setup the Mosquitto MQTT Broker, this server have to be handle MQTT connections with clients and capable to save MQTT data (payload) into database.
The server also act as a File Server and Web Server where I can upload photos via HTTP Post.
After reading some posts and research, it looks like the Synology NAS having all the features for me to setup the said server. Therefore I decided to choose the Synology DS216j NAS for this project.
How to create webpages & setup website using the CMS
This is my experience about how to create webpages & setup my personal website using the CMS (Content Management System) software. My website is 4 years old now, during this time, I learn how to upgrade my website, improve the webpages loading speed, remove virus/malware from website, and a lot more.....SEO, Google Analytic, Google Adsense, Google Captcha, Google PageSpeed Insights, Google Search Console.
Makeblock 3-in-1 mBot Ranger Robot Kit
Makeblock 3 in 1 mBot Ranger Robot Kit is a three-in-one STEM (Science, Technology, Engineering & Mathematics) Educational robot kit which offers the ability to create a Robot Tank, Three-Wheeled Racing Car and a Self-Balance Car. You can program and control the mBot Ranger via iPad, tablets or laptop.
I get my mBot Ranger Robot Kit from GearBest, the price of the kit is $134.87.
Lua_2W_Motor: 2 wheel motor library for Lua running on wireless router
This is a motor library for Lua running on wireless router which flashed with OpenWrt firmware. It allows a wireless router control the motors without using micro-controller. This library works on any dual-full-bridge driver such as L298.
Each motor require two GPIOs for controlling, therefore 2 motors will use up 4 GPIOs. Most of the wireless router may not have enough GPIO to control the motors, but you can use other pin on the router such as the LED pin, this require to unload the leds_gpio module.
Compiling OpenWrt from source
To compile OpenWrt from source, you need a computer running Linux such as Ubuntu. If you are like me and don't have a Linux computer, you can still use your Windows computer to compile OpenWrt.
In order to run Linux on a Windows, you must install virtual machine on you computer. Virtual machines allow you to run any operating system in a window on your desktop, I'm using the free VirtualBox for my case, please read here for details.
Running Ubuntu On Windows
I'm a Windows user and I always play with Linux on embedded system. Therefore I need a computer which is effective exchange of information between Windows OS & Linux OS.
This article provides information on how to install Ubuntu on Oracle VirtualBox with the following features:
- Run both Linux(Ubuntu) and Windows together.
- Sharing clipboard content between OS
- File sharing between OS
- Internet connection sharing
Lua_GPIO: GPIO Read/Write Functions for Lua
This is a very simple GPIO read/write functions for Lua running on linux-based embedded system, it is based on Arduino digital input/output syntax.
Only four functions are available: pinMode, digitalWrite, digitalRead & delay
Update: Added pin_direction_status() function on 16 Oct 2015
Ubidots-Lua: OpenWRT router + Ubidots = Real-time data monitoring
In my projects I needed a tool to monitor data in real time, the data is captured by a microcontroller and uploaded to the web using a wireless router. Initially I was trying to use yeelink since it is in chinese langguage and yet I'm a Malaysian Chinese.
One month ago, I have tried with Ubidots, there were a few things that caught my eye.
BASH Dropbox Uploader on OpenWRT
This guide is to provide detailed information on how install BASH Dropbox Uploader to a wireless router flashed with OpenWRT. Dropbox Uploader is a BASH script written by Andred Fabriz that allows you to upload, download, delete files (and more) from Dropbox.
Setup a Raspberry Pi PHP web server

- Raspberry pi running Raspbian OS
- SSH client such as PuTTy
- If you like to use GUI ( Graphical User Interface), WinSCP is preferred
- Netscanner software for IP address searching
Some useful javascript

function create_XMLHttpRequest() { //create new XHR object if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } return xmlhttp; }
- Get replay from php web server: serverResponseInfo=httpGetRequest("http://domain/myReply.php")
- Read content from a text file: serverResponseInfo=httpGetRequest("myTextFile.txt")
- Read content from a text file: document.getElementById("myDiv").innerHTML=loadXMLDoc("myTextFile.txt");
function httpGetRequest(url)
{ xmlhttp= create_XMLHttpRequest(); xmlhttp.open("GET",url,false); xmlhttp.send(); return xmlhttp.responseText; } |
- To check a file if exist in www root directory: fileExists("/settings.xml")
- To check a file if exist in the current directory: fileExists("settings.xml")
function fileExists(filename) { xmlhttp= create_XMLHttpRequest(); //create new XHR object if(!xmlhttp) return false; try { xmlhttp.open("HEAD", filename, false); xmlhttp.send(null); return (xmlhttp.status==200) ? true : false; } catch(er) { return false; } }
function loadXML(XML_filename) { xmlhttp= create_XMLHttpRequest(); xmlhttp.open("GET",XML_filename ,false); xmlhttp.send(); return xmlhttp.responseXML; }
function xmlToString(xmlDoc){ if(xmlDoc.xml){ // MSIE xmlString = xmlDoc.xml; }else{ xmlString = (new XMLSerializer).serializeToString(xmlDoc); } return xmlString; }
function createString_accordingDate() { var today = new Date(); var dd = today.getDate(); var mm = today.getMonth()+1;//January is 0! var yyyy = today.getFullYear(); if(dd<10){dd='0'+dd} ; if(mm<10){mm='0'+mm}; return (yyyy + "_" + mm + dd); }
PicShow component: Image Transition Effects for RAD Studio XE5

- Image transition can be controlled programmatically
- Image can be stretched or centered in the client area of the control
- Control can show a background image as centered, stretched, or tiled
- Transition process can use a separate thread
- New transitional effects can be easily implemented and added.
Arduino BIT manipulations
- x: the numeric variable whose bit to set
- n: which bit to set, starting at 0 for the least-significant (rightmost) bit
//initialized all pins to LOW |
- x: the numeric variable whose bit to clear
- n: which bit to clear, starting at 0 for the least-significant (rightmost) bit
//initialized all pins to HIGH //set the third pin LOW |
- x: the numeric variable to which to write
- n: which bit of the number to write, starting at 0 for the least-significant (rightmost) bit
- b: the value to write to the bit (0 or 1)
byte pinState= 0; //initialized all pins to LOW (B00000000)
bitWrite(pinState, 0, HIGH); //set first pin to HIGH, pinState = B00000001 bitWrite(pinState, 3, HIGH); //set third pin to HIGH, pinState = B00001001 bitWrite(pinState, 0, LOW); //set first pin to LOW, pinState = B00001000
|
-
x: the number from which to read
-
n: which bit to read, starting at 0 for the least-significant (rightmost) bit
byte pinState = B10101010;
for (int i=0; i<8; i++) {
theBit = bitRead(pinState, i);
}
|
DIYLC电子绘图软件

Arduino communicate with Vixen Lighting Control Software

Develop Android Application without Coding
App Inventor is an application use to develop Android application without programming. Its graphical interface is very similar to Scratch that allow users to drag and drop visual objects to develop application which runs on many mobile devices.
Backing Up Raspberry Pi SD card
- Insert SD card to computer
- Launch Win32 Disk Imager
- Select Device (source) which you want to backup from
- Under Image File, give it a file name as shown in figure below

- Click Read button to start backing up
- As shown in figure below, the image file size is equivalent to the size of SD card since I had resized the partition of my SD card

Gambas for Raspberry Pi
- After download the image file (it is zipped), extract it to any location of computer. Now your computer should have an image file named as 2012-07-15-wheezy-gambas3.img
- Write this img file to SD card using Win32DiskImager as describe in this article
- Remove the SD card from computer once writing completed
- Insert the SD card to Raspberry Pi & power on it.
- Remote access to Raspberry using TightVNC as describe in this article
- You should see Gambas icon appear on the desktop screen.
- To start Gambas3, click the first icon at the left bottom screen then select Programming>Gambas3
People find that they are facing 100% CPU usage when using Gambas3, you can use the patch to overcome this problem.
TinyBASIC for Raspberry Pi
You need to install libsdl-gfx1.2-4 package before install TinyBASIC.
- SSH to Raspberry Pi and execute command below:
sudo apt-get install libsdl-gfx1.2-4 |
- Download TinyBASIC deb file and save it to any location of computer
- Transfer the downloaded deb file from computer to /tmp folder of Raspberry Pi using WinSCP
- Execute command below to start install TinyBasic
sudo dpkg -i /tmp/tinybasic_2.1-1_armhf.deb |
Virtualbox Raspberry Pi Emulator
Download
- Download the zip file and extract the included torrent file to any folder
- Open the torrent file with any torrent client. I'm using flashget to open the torrent file.
- The download should start.
- You will have a 658,763KB ova file upon completion of downloading
免费屏幕捕获软件--Screenshot Captor
一个非常好用的免费屏幕捕获软件,下载和安装Screenshot Captor后,它必须激活。注册一个免费帐户,你就将会得到一个激活密钥。Screenshot Captor可以使用不同的方式来捕获屏幕,如图下:
多功能格式转换软件--PdfCreator
PDF,PNG,JPEG,BMP,PCX,TIFF,PS,EPS,TXT,PSD,PCL,Raw,SVG
Wireless Router Home Automation
Lua sleep function in milliseconds
Lua Socekt must be use in order to call sleep function in milliseconds.
An example to install Lua Socket to OpenWRT
opkg update
opkg install luasocket
|
An example to sleep 10 milliseconds
require "socket"
socket.sleep(0.010)
|
Lua can only sleep/wait in seconds (not milliseconds) without install Lua Socket. Code below shows the sleep funciton.
function delay_s(delay)
delay = delay or 1
local time_to = os.time() + delay while os.time() < time_to do end end
|
Example to sleep 5 seconds
delay_s(5) |
D-LINK DNS-320 Firmware Upgrade from 2.00 to 2.02
- dns320_FW-202 dated 2011/11/23: ftp://ftp.dlink.com/Multimedia/dns320/Firmware/
- You can also download the beta version dated 2012/03/30, but I didn't test it.
OpenWRT in Client Mode
Fun_plug 0.7 on D-LINK DNS-320 ShareCenter
- D-LINK DNS-320 ShareCenter
- Hard Disk Configure as Volume_1: Standard as shown in figure below
TP-LINK TL-WR1043ND Router + Web Cam = IP Cam
- A working OpenWRT on TP-LINK TL-WR1043ND Router
- Web Camera. I'm using Microsoft LifeCam HD-5000
OpenWRT in VirtualBox
If you are considering to test OpenWRT without a router or you don’t want to flash the router firmware over and over again. Here is the right place for you.
OpenWRT in VirtualBox is an image file run in VirtualBox. By the time I write this article, the VirtualBox & OpenWRT image version are Ver 4.1.20 and 10.03.1 respectively.
TP-LINK TL-WR1043ND router as a Samba File Server
Samba is a free software re-implementation of the SMB/CIFS networking protocol, Samba provides file and print services for various Microsoft Windows clients.
First, this assumes that you already have OpenWRT installed. Read this article if you haven't upgrade firmware to OpenWRT.
Second, you must have a working USB flash drive attach to router. Read here for installing USB flash drive.
Adding FTP feature to TP-LINK TL-WR1043ND router
FTP is a method of transmitting or recieving files across the Internet and stands for File Transfer Protocol. This article guide you on how to enable FTP function on the OpenWRT router.
It is assumed that the router is flashed with OpenWRT. See this article if you haven't upgrade firmware to Openwrt.
TP-LINK TL-WR1043ND Mount with USB Flash Drive
16 Output Arduino Controller
WinSCP (Windows Secure CoPy)
WinSCP is an open source free SFTP client, SCP client, FTPS client and FTP client for Windows.
Most people use vi as the text editor during configuration of embedded device. I hate to use vi, in which I have to memorize all the commands. Whereas WinSCP is a GUI (Graphical User Interface) program where you can edit your file like notepad. Additionally you can use WinSCP to download and upload files including settings of permission.
TP_LINK TL-WRT1043ND router and OpenWRT is use in this tutorial.
Integrating PuTTY in WinSCP
Most of the time, I use both WinSCP (Windows Secure CoPy) & PuTTY together, especially when work with Openwrt and DD-Wrt. It is very troublesome to start each program individually. So I decided to integrate PuTTY into WinSCP.
WinSCP is an open source free SFTP client, SCP client, FTPS client and FTP client for Windows.
PuTTY is a free implementation of Telnet and SSH for Windows and Unix platforms.
http://www.chiark.greenend.org.uk/~sgtatham/putty/
I would suggest to download the portable version for both WinSCP & Putty. With the portable version, you can easily copy WinSCP & PuTTY from one computer to another computer without erase the settings.
Here is the link for partable WinSCP & Putty:
http://portableapps.com/news/2012-07-29--winscp-portable-4.3.9-released
PHP Control Arduino with TP-Link TL-WR1043ND Router
My previous article Control Arduino via PHP (EasyPHP) control Arduino from a computer with web server. Another article Control Arduino with TP-Link TL-WR1043ND Router which the Arduino is connecting to the router, but it is not safely to control over the internet.
AppServ Web Server
Before reading this article, you may want to know EasyPHP web server that I setup previously, please refer this page http://diy2u.weebly.com/1/post/2012/07/winxp-easyphp-web-server.html.
Delphi Auto Backup
1. Delphi 7
2. EhLib
3. Zip Master
4. Cool Tray Icon
Compiled executable files: http://www.divshare.com/download/18621448-952
Zip Master: http://www.divshare.com/download/18621506-771
Cool Tray Icon: http://www.divshare.com/download/18621459-5d2
EhLib: http://ehlib.com/ (This is not a free component)
Cheque Printing Software
This is a program for those who want to print a lot of cheques.
Software & Components for Developing
1. Delphi 7
2. Fast Report
3. EhLib
Downloads
Source Code: http://www.divshare.com/download/18624628-375
Compiled Executable Files: http://www.divshare.com/download/18625292-ccf
How to Install
- Download the Compiled Executable Files program & save it to any folder.
- Run ChequeP.exe
How to use
- Run Cheque.exe to open main window
- Click on New button to prepare first batch of cheque.
- Now you can enter cheque particulars from the main window
- You can enter as many cheques as you want before print
- Click on Print Current button to print selected cheque
- Click on Print All button to print all cheques
- Click New button again to prepare next batch of cheque, all existing cheque particulars is backup-ed
- Tracking button is use to display all cheque particulars being enter previously. The top empty row is use for filtering
- Design button is use for cheque print out design
- Payees button is use to enter payees information so that payees name can be select from main window
Control Serial via PHP
<?php |
Control Arduino via PHP (EasyPHP)
The Arduino Duemilanove (not Arduino Uno) is control by a computer over the network or internet via PHP. This article assumed that you already install WAMP web server & Arduino driver in your computer.
My Arduino Duemilanove is connecting to the USB port of my computer, the USB serial com port is detected as COM4.
EasyPHP Web Server (WinXP)
I had do a research before I stick into one particular web server software, here you can get some web server information. After study some post from internet & tested myself. Finally EasyPHP is my choice.
EasyPHP is a wonderful WAMP server application. With EasyPHP, you will have PHP, MySQL , Apache, PhpMyAdmin, Xdebug on your computer.
I start using EasyPHP from version 5.3.9. Now it is EASYPHP 12.0 and there is three different PHP version including in EASYPHP 12.0:
Run Android 2.3 on VirtualBox
I choose Android 2.3 because I own a Samsung GALAXY Y (S5360) hand phone which preloaded with Android 2.3. I always test the applications on my computer before I download to the hand phone.
Fun_Plug 0.5 on D-Link DNS-320 ShareCenter
Fun_plug is a collection of applications compiled and packaged by fonz. fun_plug is install on top of D-Link firmware. It is much more powerful than the D-Link original firmware. The following modules is install by default:
- Lighttpd – a lightweight HTTP server for hosting web pages on the NAS
- OpenSSH – Secure Shell (which you already used to login to the NAS)
- Mediatomb – a UPnP media server (alternative to the one provided by Conceptronic)
- NTP – Network Time Daemon (to synchronize the NAS’ clock with accurate time servers on the Internet)
- UNFS3 – user-space NFS server (a file server protocol which is often used by computers running Linux)
- NFS-Utils – NFS server (efficient file transfer and synchronization utility)
This guide is based on fun_plug 0.5 & D-Link DNS-320 ShareCenter and assumes an SATA hard disk is installing to the DNS-320 ShareCenter formatted as ext3.
TP-Link TL-WR1043ND restore from DD-WRT to Original Firmware
- TP-Link TL-WR1043 stock firmware: http://www.divshare.com/download/19132686-eec
- WinSCP: http://winscp.net/
- PuTTY: http://www.putty.org/
- WinSCP is an open source free SFTP client, SCP client, FTPS client and FTP client for Windows. Its main function is file transfer between a local and a remote computer. I use this sofware to transfer files from my WinXP computer to the router.
- PuTTY is a free implementation of Telnet and SSH for Windows and Unix platforms. I use this software to SSH to router & perform flashing command.
- Open up a browser and navigate to http://192.168.1.1 (you should use your own IP)
- Login in to DD-WRT.
- Goto Services tab and enable SSH
- Goto Administration/Management and enable SSH
Copy firmware file to Router
- Unzip the downloaded firmware file to any folder, now you have wr1043nv1_en_3_13_10_up(120210).bin in your computer
- Run WinSCP
- Transfer wr1043nv1_en_3_13_10_up(120210).bin to /tmp of router
- You may want to rename the firmware filename to shorter one, I renamed it to a.bin
Start Flashing
- Run PuTTY (SSH to router)
- Enter command as blow
cd /tmp mtd -r write a.bin linux |
The router will reboot upon flashing successfully
DD-WRT on TP-Link TL-WR740N Router
Here is the link. You must download both factory-to-ddwrt.bin & tl-wr740nv4-webflash.bin.
1. Enter 192.168.1.1 from IE to login to the router. Select System Tools then click on Firmware Upgrade.
2. Choose factory-to-ddwrt.bin which you download to your computer previously.
3. Click Upgrade button to start firmware upgrading.
4. The router will restart automatically after completed upgrade.
Screen shot for upgrade firmware: http://www.divshare.com/download/18183284-fed
5. Login to router again. Now DD-WRT prompt you for changing user name & password.
6. Enter the new router user name & password then click on Change Password button.
7. Enter new user name & password to login to the router.
8. Click on Administration from DD-WRT menu then select Firmware Upgrade.
9. Choose tl-wr740nv4-webflash.bin & click on Upgrade button
The router will upgrade to DD-WRT dated 03-19-12-r18777 which is much more powerful than before.
Control Arduino with TP-Link TL-WR1043ND Router
The Arduino is plug into the USB port of TP-LINK TL-WR1043ND allow the router to control the Arduino.
After upgrade router firmware to Openwrt, Login to it & change the password in order to enable SSH.
SSH to the Router
- Run PuTTy
- Enter 192.168.1.1 for Host Name (this is the default IP for Openwrt set in TL-WR1043ND)
- Change connection type to SSH
- Click on Open button
- Enter your router username (username is root if you didn't change it)
-
Enter your password
HTML Onclick Image Button with CSS
This is a tutorial to show image button on webpage, it use CSS.
See http://www.w3schools.com/css/default.asp for more information.
Below is an example to show two image buttons. <div class="img"> is the CSS, it is not define in this example, but it is working without any CSS style.
</html> <div > |
HTML Onclick Button Image
There is few ways to show image button on the webpage. Here I use <a.
<a target="_parent" href="/newWebPage.php"><img src="/images/light_on.png" alt="Light" /></a> |
Above example shows an image with event. newWebPage.php will open if user click on the image.
- target="_parent" means open a new page when user click on the image. See http://www.w3schools.com/tags/att_a_target.asp for more information
- href= is the action. It will open newWebPage.php when user click on the image.
- img src= show the image on the page. It support many formats such as png, jpg, gif, bmp & others. I often use png & gif (animation) format since both support transparent.
- alt= will show the text if the associated image is not exist.
Note: IE8 and Google Chrome show output differently. There is a rectangular frame around the image if loaded with IE8, while Google Chrome did not show any frame.
Below example execute a javascript function called runCmd with two parameters:
<a href="javascript:runCmd(1,'a')"><img src="/images/fan_on.png" alt="Fan" /></a> |
See http://www.w3schools.com/tags/tag_a.asp for more information on how to use <a
Below example shows four images aligned in horizontally:
<a target="_parent" href="/newWebPage.php"><img src="/images/light_on.png" alt="Light" /></a> |