Skip to main content

Banana Pi DLNA media server

Couple of months back we decided to create our own media server to store our MP3s and digital photographs. But it gets postpone several months due to unavailability of main-boards and other resources. Finally, after reviewing several prototypes we decided to build our media server using Banana Pi (BPI) and MiniDLNA. Before finalize BPI we checked several main-boards which including Raspberry Pi B+, Orange Pi One and BeagleBone Black. Out of all above main-boards we choose BPI M1 because of its inbuilt SATA2.0 interface, Gigabit Ethernet port and availability in local market.

Final view of DLNA media server setup.

As an operating system we use Bananian Linux, which is Debian derivative for BPI platform. To sore all our content, we use Seagate 1TB SATA 3.5 inch hard disk drive. Bananian OS and other packages are loaded into 8GB SD card.

To power both BPI and SATA disk drive we design PSU using LM2576-5.0 step-down switching regulator IC. Also during the prototyping stages, we notice that both hard disk drive and BPI A20 CPU get heat-up during the long runs and to cool those components we decided to build simple fan controller with temperature monitor. After couple of designs we finally build BPI support board with above 5V regulator and LM311 based fan controller. To make it simple we construct above two components in 80mm × 53mm single side PCB. Both schematic and PCB design of this unit is available to download at Google drive.

5V regulator and fan controller board.

When constructing above switching regulator pay special attention to 100┬ÁH inductor (L1) and associated components in switch regulator stage. Specially if inductor is not up to the specification SATA interface may get fail with I/O errors. We got this problem while we testing this regulator in breadboard.

To monitor system temperature, we use LM35 temperature sensor with LM311 comparator. Fan trigger level can adjust using RV1 trimpot.

To drive this regulator and fan controller board, we use commonly available 12V 10A SMPS unit. Because we plan to run this server for 24×7 we choose quite reliable SMPS for this system.
After setting up all hardware components we configure and setup necessary software with following set of commands:

1.) We assign static IP address to eth0 by adding following lines to /etc/network/interfaces file:

auto eth0
  iface eth0 inet static

After above modification we restart networking service to apply changes to the system:

service networking restart

2.) Our SATA disk drive is available at /dev/sda1 and we mount it with following commands:

mkdir /data-disk
mount /dev/sda1 /data-disk

The problem with this option is that above mount point gets detached during system restarts. To made this mount point permanent we add following line to /etc/fstab :

/dev/sda1 /data-disk ext4 defaults 0 1

(ext4 is the file system which we used in our disk drive. To get the disk format type use blkid command)

After above changes we restart the operating system to install MiniDLNA system.

3) To store all MiniDLNA data files and log we create following two directories in our sda1 mount point:

cd /data-disk
mkdir minidlna
cd minidlna
mkdir db
mkdir log
chmod 777 -r /data-disk/minidlna

Then we create directory call media in our sda1 mount point:

cd /data-disk
mkdir media
chmod a+w ./media

After creating above directory hierarchy, we modify MiniDLNA configuration file (/etc/minidlna.conf) as follows:


After above changes we restart MiniDLNA service with following command:

service minidlna restart

Once all media files are copied to /data-disk/media directory we execute following command:

minidlnad -R
service minidlna restart

To copy media files, we use SCP.

Our DLNA server now loaded with approximately 7000 high resolution JPG files and 5000 MP3 files. With above payload it still works perfectly with all operating systems and media players. We mainly connecting with this server through VLC (Linux, Android and Windows), KODI (Android and Windows) and Windows Media Player.


Popular posts from this blog

Enable WebRTC on QtWebEngine for Raspberry Pi 3

WebRTC is a web technology to enable peer to peer communication in real-time. It mainly uses to create video conferencing and chat applications using web browsers. In this post, we describe how to enable this technology in QtWebEngine on Raspberry Pi 3 platform.

QtWebEngine is an embedded browser component which comes with the Qt framework. This component is based on Google Chromium browser and it supports most of the Chromium features including WebRTC. In PC, WebRTC applications run smoothly on QtWebEngine component. But in Raspberry Pi platform situation is different and none of the WebRTC application is work with the QtWebEngine. The only thing which we can see is a black box in an HTML5 video tag area. At the time of writing this problem exists in Qt version 5.6, 5.7 and 5.8.

BMP180 based USB atmospheric pressure monitor

We initially developed this USB atmospheric pressure monitor to study some operating characteristics of Bosch BMP180 sensor. BMP180 is a low-cost sensor for measuring barometric pressure and temperature. According to the datasheet this sensor can use to measure pressure ranging between 300hPa to 1100hPa. This sensor is introduced a couple of years back but still, it is popular due to lower cost and simplicity of its interface.

We did this unit to test the BMP180 sensor more accurately and to study its behaviors. This unit is based on PIC18F2550 microcontroller and the main reason to select this MCU is because of its built-in USB 2.0 interface.

To display sensor calibration data and it’s readings we did small windows application. This application display and plot temperature and pressure readings captured from the BMP180 sensor.

This unit is programmed to work as a USB HID device and no special device driver is required to use this device. We test this unit in Windows 10 environment.

Programmable light controller

The main objective of this project is to design a maintenance free and low-cost light which automatically turns on and off at the predetermined time of the day.

To meet the above requirement I designed this controller using ATmega8 MCU and DS1307 RTC. The driver stage of this light controller is intended to work with commonly available 7W LED modules.

The core component of this programmable light is ATmega8 low power CMOS microcontroller. The main reason to select this microcontroller is it’s lower cost and higher availability. Except for the above two reasons this microcontroller also bundled with a rich set of peripherals which including 23 GPIOs, 3 independent timers, Two-wire serial interface, EEPROM, etc.

Apart from ATmega8 microcontroller, this system uses DS1307 real time clock to maintain system time. Like ATmega8, DS1307 is also a very popular RTC in the market.

This controller is designed to work with a 24V DC power supply. The main reason to select 24V is that most of the…