CM3-Panel-7-poe technical documentation Buy on-line

Make a Raspberry Pi OS microSD for CM3-PANEL 7 POE

This article explains how to create a standard Raspbian Pi OS MicroSD to use on the CM3-PANEL 7 POE starting from an official Raspberry Pi MicroSD image

Step-by-step guide

Download the image 2020-12-02-raspios-buster-armhf-lite.zip from this link:

Flash a microSD SD using Balena Etcher software.

Mount the microSD just created on your PC (Linux or Windows) or your Mac. The first microSD partition labeled "boot" is formatted as FAT32 and visible on any system. These files are to edit using an ASCII editor:

Edit cmdline.txt

Change:

console=serial0,115200

in:

console=serial1,115200

Edit config.txt

Change the content of config.txt file in:

# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details

# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1

# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16

# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720

# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1

# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1

# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2

# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4

# uncomment for composite PAL
#sdtv_mode=2

#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800

# Uncomment some or all of these to enable the optional hardware interfaces
dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on

# Uncomment this to enable infrared communication.
#dtoverlay=gpio-ir,gpio_pin=17
#dtoverlay=gpio-ir-tx,gpio_pin=18

# Additional overlays and parameters are documented /boot/overlays/README

# Enable audio (loads snd_bcm2835)
#dtparam=audio=on

[pi4]
# Enable DRM VC4 V3D driver on top of the dispmanx display stack
#dtoverlay=vc4-fkms-v3d
#max_framebuffers=2

[all]
#dtoverlay=vc4-fkms-v3d

# -------------------------
# ACME Systems
# -------------------------
dtoverlay=goodix-7-acme
dtoverlay=disable-wifi
dtoverlay=disable-bt

#Ignore the HDMI cable hotplug (to avoid the delay at startup)
hdmi_ignore_hotplug=1

dtoverlay=pi3-disable-bt
enable_uart=1
dtparam=uart1=on
dtoverlay=uart1,txd1_pin=32,rxd1_pin=33

# Configure the uart0 on the console port hardware 
# This port is managed by the SOC using the miniUART and located on Linux on /dev/ttyS0
force_turbo=1
dtoverlay=uart0,txd0_pin=36,rxd0_pin=37,pin_func=6

# Activates the I2C 1 port on GPIO44 and 45 to talk with the
# touch screen controller end camera crypto-chip
dtparam=i2c_arm=on
dtparam=i2c=on
dtparam=i2c_arm_baudrate=100000

dtoverlay=i2c1,pins_44_45
dtoverlay=i2c1-rtc,pcf8523

## Enable the DPI port to talk with the TFT display
dtoverlay=dpi18
overscan_left=0
overscan_right=0
overscan_top=0
overscan_bottom=0
framebuffer_width=800
framebuffer_height=480
enable_dpi_lcd=1
display_default_lcd=1
dpi_group=2
dpi_mode=87
dpi_output_format=0x6f005
hdmi_timings=800 0 40 48 88 480 0 13 3 32 0 0 0 60 0 32000000 6

start_x=1
gpu_mem=128

# Enable second I2C Bus 3
dtoverlay=i2c-gpio,bus=3,i2c_gpio_delay_us=1,i2c_gpio_sda=35,i2c_gpio_scl=27

# Set the pull up (input) pins 27 and 35
gpio=27,35=pu

dtparam=audio=off
dtoverlay=i2s-gpio28-31
dtoverlay=hifiberry-dacplus

Download and save some binaries

In the first partition of the microSD save these binary files:

/overlays

* acme-dacplus.dtbo
* goodix-7-acme.dtbo
* hifiberry-dacplus-overlay.dtbo

/

* dt-blob.bin
* SSH

Insert the microSD inside the CM3-Panel-7-poe microSD socket

Remove the Supercap jumper

Close JUMP PROG BYPASS and power up the CM3-Panel-7-poe

Install some utilities

When the board is on get access to its console and type:

$ uname -r
Kernel version : 5.4.79-v7+

Install pyserial package

$ sudo apt-get update
$ sudo apt-get install python-pip
$ pip install pyserial
$ sudo apt-get install python-smbus i2c-tools

Serial ports list command:

$ python -m serial.tools.list_ports

Result:

pi@panel7:~$ python -m serial.tools.list_ports                                                              
/dev/ttyAMA0        
1 ports found

Now sudo raspi-config and enable I2C and reboot

$ sudo raspi-config
  1. Select Interface Options and enable I2C
  2. Select Network at Boot ( Would you like boot to wait until a network connection is established? Set to NO )

    $ sudo reboot

    $ sudo i2cdetect -l

Result:

i2c-3   i2c             3.i2c                                   I2C adapter
i2c-1   i2c             bcm2835 (i2c@7e804000)                  I2C adapter

Run command:

$ sudo i2cdetect -y 3

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

$ sudo i2cdetect -y 1

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- UU -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- UU -- -- 
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
  • 0x5d Address = Display Touch.
  • 0x68 Address = Real time clock.
  • 0x4d Address = Chip audio.

Setting the Real Time Clock

$ sudo apt-get -y remove fake-hwclock
$ sudo update-rc.d -f fake-hwclock remove
$ sudo systemctl disable fake-hwclock

Edit file /lib/udev/hwclock-set:

$ sudo nano /lib/udev/hwclock-set

and comment line:

#!/bin/sh
# Reset the System Clock to UTC if the hardware clock from which it
# was copied by the kernel was in localtime.

dev=$1

#if [ -e /run/systemd/system ] ; then
# exit 0
#fi

Edit the file /etc/modules

$ sudo nano /etc/modules

with these contents:

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

i2c-dev
rtc-8523

Edit file /etc/rc.local:

$ sudo nano /etc/rc.local (Insert las line before exit 0)

with these contents:

# PCF8523
echo pcf8523 0x68 > /sys/class/i2c-adapter/i2c-1/new_device

exit 0

Reboot:

$ sudo reboot

Now run command:

$ sudo i2cdetect -y 1

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- UU -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- UU -- -- 
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

Address 0x68 is Real Time Clock

Create a directory /home/pi/app:

$ mkdir /home/pi/app

Create the file /home/pi/app/goshd.py with these contents:

#!/usr/bin/python

import RPi.GPIO as GPIO
import time
#import serial
#import sys
#import getopt
#import string 
import datetime
#import select
#import termios
#import sys
#import tty
import os
#import socket

O_DISPLAY       =22
I_SHD           =25

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

GPIO.setup(I_SHD,GPIO.IN)
GPIO.setup(O_DISPLAY,GPIO.OUT)

while True:
        if GPIO.input(I_SHD) == 1:
                GPIO.output(O_DISPLAY,GPIO.HIGH)        # Display Off
                os.system("sudo shutdown -h -P now")

        time.sleep(.5)

Set it as executable:

$ chmod +x /home/pi/app/goshd.py

Create a service by editing this file:

$ sudo nano /etc/systemd/system/goshdn.service

Save in it these contents:

[Unit]
Description=Set Auto shutdown
After=systemd-user-sessions.service

[Service]
ExecStart=/home/pi/app/goshd.py
Restart=on-abort
User=root
WorkingDirectory=/home/pi/app

[Install]
WantedBy=multi-user.target

Then enable the service by typing:

$ sudo systemctl daemon-reload
$ sudo systemctl enable goshdn.service

Create the file /home/pi/app/cm3start.py with these contents:

#!/usr/bin/python

import RPi.GPIO as GPIO
import time
import os

SHDNDONE        = 26

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(SHDNDONE,GPIO.OUT)

# On CM3 (Send message OK to Microcontroller )
GPIO.output(SHDNDONE,GPIO.LOW)

# Set Register RTC
os.system("sudo i2cset -y -f 1 0x68 0x00 0x58")
os.system("sudo i2cset -y -f 1 0x68 0x0f 0xff")
os.system("sudo hwclock -s")

Set it as executable:

$ chmod +x cm3start.py

Create a systemd file for this service:

$ sudo nano /etc/systemd/system/cm3start.service

with this content:

[Unit]
Description=CPU to microcontroller to start regular operating system
After=systemd-user-sessions.service

[Service]
ExecStart=/home/pi/app/cm3start.py
Restart=on-abort
User=root
WorkingDirectory=/home/pi/app

[Install]
WantedBy=multi-user.target

Then enable the service by typing:

$ sudo systemctl daemon-reload
$ sudo systemctl enable cm3start.service
$ sudo halt

Now Remove Jumper BYPASS

Insert Jumper to Supercap CHK

Power on board and wait charge supercap.

When the Board has been started and the operating system has been started up regulary, disconnect the board from the power supply. The same will turn off automatically the shutdown.

Now the Power Safe is activated. !!!

Create python script set_alarm.py (Interrupt RTC)

$ sudo raspi-config

Examples:

Set Localisation Options, L2 Timezone, Europe and Rome.

This will be used for example to set the board to switch on at a set time (MANUAL mode) at a set time through the Interrupt Real Time Clock chip.

Python Script for setting interrupt.

$ nano /home/pi/app/set_alarm.py

Contents:

#!/usr/bin/python
'''
===============================================================================
Description :   Set PCF8523 Alarm interrupt - Minute or Time
Board       :   CM3-Panel V.7 POE - Acme Systems
Autror      :   Mauro Tocci
Version     :   1.1 - October 2019

-------------------------------------------------------------------------------
Use example :
-------------------------------------------------------------------------------
script.py 12:15 M N N
script.py 12:15 T N N
                | | |_ Y = Debug enable (Y only screen, no transfer to the chip)
                | |
                | |___ Y = Sync NTP server
                |
                |_____ M = Switching on only when the minutes indicate value 15
                |_____ T = Start-up time 12:15
-------------------------------------------------------------------------------
Logic sequence:
Time alarm example: 14:30

1. Split time value to array (variable dato[x])
2. Hour calculation (dato[0]) to time UTC

3. Calculation of hexadecimal values to be set on the RTC registers

Hour alarm register (address 0Bh)
               Hour
              __12__    <--- UTC value
             |      |
            DEC   UNIT
            7654  3210  Bit registry
            0001  0010  Binary
             |______|
                |    <- Concatenate
             00010010   BCD to hex convert
                |
              0x12      Hexadecimal value
                |
sudo i2cset -f -y 0x68 0x0b 0x12    Set Hour Alarm registry

Minute alarm register (address 0Ah)
              Minute
              __30__
             |      |
            DEC   UNIT
            7654  3210  Bit registry
            0011  0000  Binary
             |______|
                |    <- Concatenate
             00110000   BCD to hex convert
                |
              0x30      Hexadecimal value
                |
sudo i2cset -f -y 0x68 0x0a 0x30    Set Minute Alarm registry

4. Send final sequence data to RTC

sudo ntpdate ntp1.inrim.it          # Sync NTP Server Italiano (Y)
sudo hwclock -w                     # Set clock hardware (Y)
sudo i2cset -f -y 0x68 0x00 0x58    # Reset chip PC8523"
sudo i2cset -f -y 0x68 0x00 0x02    # AIE Enable alarm INT1
sudo i2cset -f -y 0x68 0x0f 0xff    # INT1 Off - mosfet open
sudo i2cset -f -y 0x68 0x0a 0x30    # Set Minute Alarm registry
sudo i2cset -f -y 0x68 0x0b 0x12    # Set Hour Alarm registry
===============================================================================
'''
import os
import sys
import datetime
from datetime import timedelta

#----------------------------------------------------------------------
# Conversione da decimale a binario
#----------------------------------------------------------------------
def bcddigit(sn,dgt):
    n = int(sn)
    bin_nr = bin(n)[2:]
    return (('0' * dgt ) + bin_nr)[-dgt:]

#----------------------------------------------------------------------
# Clear
#----------------------------------------------------------------------
def cls():
    os.system('cls' if os.name=='nt' else 'clear')

try:
    #----------------------------------------------------------------------
    # Variabili dati
    #----------------------------------------------------------------------
    dato  = sys.argv[1].split(':')  # Array orario inserito
    TYP   = sys.argv[2]             # Tipo scrittura
    Sync  = sys.argv[3]             # Sync to NTP server
    Debug = sys.argv[4]             # Debug print value

    #----------------------------------------------------------------------
    # Sezione preparazione dati da inviare al chip
    #----------------------------------------------------------------------
    cls()

    delta = 0
    ACTH  = dato[0]                 # Ore inserite
    ACTM  = dato[1]                 # Minuti inseriti

    # UTC
    utc_h = datetime.datetime.utcnow()

    # Local time
    dat_h = datetime.datetime.now()

    # Trovo differenza tra Local time e UTC
    if ( utc_h < dat_h ):
        delta = (int(dat_h.strftime("%H")) - int(utc_h.strftime("%H"))) *-1

    #----------------------------------------------------------------------
    # UTC Calculate
    #----------------------------------------------------------------------
    utc_h = datetime.datetime.now().strftime("%Y-%m-%d " + dato[0] + ":" + dato[1])
    utc_h = datetime.datetime.strptime(utc_h, '%Y-%m-%d %H:%M')
    utc_h = utc_h + timedelta(hours=delta)
    dato  = utc_h.strftime("%H:%M").split(':')  # Nuovo orario calcolato

    D = 4
    BIN_D   = ""    # Decine
    BIN_U   = ""    # Unita'
    reg_0a  = ""    # Registro minuti
    reg_0b  = ""    # Registro Ore

    if ( Debug == 'Y' ):
        print "==================================================================="
        print " Riepilogo dati inseriti e calcolo registri"
        print "==================================================================="
        print "Time             : " + sys.argv[1]
        print "Type             : " + TYP
        print "Sync NTP         : " + Sync
        print "Calc UTC         : " + repr(delta) + " hours compared to Local Time"

    if ( TYP == 'T' ):

        if ( Debug == 'Y' ):
            print ""
            print "-----------------"
            print "      HOURS"
            print "-----------------"
            print " Value           : " + ACTH
            print " UTC calculation : " + dato[0]
            print ""
            print " Ten's place     : " + dato[0][:1]

        BIN_D = bcddigit(dato[0][:1],D)

        if ( Debug == 'Y' ):
            print " Binary          : " + BIN_D
            print " HEX             : " + hex(int(BIN_D,2)).replace("0x", "0x0")
            print ""
            print " Unit place      : " + dato[0][1:]

        BIN_U = bcddigit(dato[0][1:],D)

        if ( Debug == 'Y' ):
            print " Binary          : " + BIN_U
            print " HEX             : " + hex(int(BIN_U,2)).replace("0x", "0x0")

            print ""
            print " Bit registry    : 76543210 - AEN_H = 7 (0 = Enable, default 1)"
            print " Binary          : " + BIN_D + BIN_U

        BIN = BIN_D + BIN_U

        if ( int(BIN,2) < 16 ):
            reg_0b = hex(int(BIN,2)).replace("0x", "0x0")
            if ( Debug == 'Y' ):
                print " HEX Reg. 0Bh    : " + reg_0b
        else:
            reg_0b = hex(int(BIN,2))
            if ( Debug == 'Y' ):
                print " HEX Reg. 0Bh    : " + reg_0b

    if ( Debug == 'Y' ):
        print ""
        print "-----------------"
        print "    MINUTES"
        print "-----------------"
        print " Value           : " + ACTM
        print ""
        print " Ten's place     : " + dato[1][:1]

    BIN_D = bcddigit(dato[1][:1],D)

    if ( Debug == 'Y' ):
        print " Binary          : " + BIN_D
        print " HEX             : " + hex(int(BIN_D,2)).replace("0x", "0x0")
        print ""
        print " Unit place      : " + dato[1][1:]

    BIN_U = bcddigit(dato[1][1:],D)

    if ( Debug == 'Y' ):
        print " Binary          : " + BIN_U
        print " HEX             : " + hex(int(BIN_U,2)).replace("0x", "0x0")
        print ""
        print " Bit registry    : 76543210 - AEN_M = 7 (0 = Enable, default 1)"
        print " Binary          : " + BIN_D + BIN_U

    BIN = BIN_D + BIN_U

    if ( int(BIN,2) < 16 ):
        reg_0a = hex(int(BIN,2)).replace("0x", "0x0")
        if ( Debug == 'Y' ):
            print " HEX Reg. 0Ah    : " + reg_0a
    else:
        reg_0a = hex(int(BIN,2))
        if ( Debug == 'Y' ):
            print " HEX Reg. 0Ah    : " + reg_0a

    if ( Debug == 'Y' ):
        print ""
        print "-------------------------------------------------------------------"
        print " Set registry PCF8523"
        print "-------------------------------------------------------------------"
        if ( Sync == 'Y' ):
            print "sudo ntpdate ntp1.inrim.it" + "       # Sync NTP Server Italiano"
            print "sudo hwclock -w" + "                  # Set clock hardware"

        print "sudo i2cset .y -f 1 0x68 0x00 0x58" + " # Reset chip PC8523"
        print "sudo i2cset -y -f 1 0x68 0x00 0x02" + " # AIE Enable alarm INT1"
        print "sudo i2cset -y -f 1 0x68 0x0f 0xff" + " # INT1 Off"

        if ( TYP == 'T' ):
            print "sudo i2cset -y -f 1 0x68 0x0b " + reg_0b + " # Set Hour register"

        print "sudo i2cset -y -f 1 0x68 0x0a " + reg_0a + " # Set Minute register"
        print ""

    if ( Debug == 'N' ):
        if ( Sync == 'Y' ):
            x=os.system("sudo ntpdate ntp1.inrim.it")
            x=os.system("sudo hwclock -w")

        os.system("sudo i2cset -y -f 1 0x68 0x00 0x58")
        os.system("sudo i2cset -y -f 1 0x68 0x00 0x02")
        os.system("sudo i2cset -y -f 1 0x68 0x0f 0xff")

        if ( TYP == 'T' ):
            os.system("sudo i2cset -y -f 1 0x68 0x0b " + reg_0b + "")

        os.system("sudo i2cset -y -f 1 0x68 0x0a " + reg_0a + "")

except IndexError as e:
    cls()
    print "---------------------------------------------------------------------------------------"
    print " Error insert data"
    print "---------------------------------------------------------------------------------------"
    print "     Example use :"
    print ""
    print "     Name      Time  Functions"
    print "     script.py 12:15 M N N"
    print "     script.py 12:15 T N N"
    print "                     | | |_ Y = Debug enable (Y only screen, no transfer to the chip)"
    print "                     | |"
    print "                     | |___ Y = Sync NTP server"
    print "                     |"
    print "                     |_____ M = Switching on only when the minutes indicate value 15"
    print "                     |_____ T = Start-up time 12:15 (*)"
    print ""
    print "     (*) Note : The time is recalculated by the script based on the UTC format."
    print "---------------------------------------------------------------------------------------"
    print ""

Example use:

./set_alarm.py 16:11 T N N

This set interrupt to LOW status from hour 16:11.

Testing chip audio.

$ sudo nano /etc/asound.conf

Contents:

pcm.!default {
  type hw card 0
}
ctl.!default {
  type hw card 0
}

Type:

$ sudo reboot
$ sudo apt install mplayer
$ aplay -l

Result:

**** List of PLAYBACK Hardware Devices ****
card 0: sndrpihifiberry [snd_rpi_hifiberry_dacplus], device 0: HiFiBerry DAC+ Pro HiFi pcm512x-hifi-0 [HiFiBerry DAC+ Pro HiFi pcm512x-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Create directory /home/pi/app/audio and copy file MP3.

$ mkdir /home/pi/app/audio

Run Player examples :

$ mplayer nomefile.mp3

Connect camera to CM3 Panel 7.

$ sudo raspi-config

Enable camera, select P1 Camera and poweroff board. Connect camera and power on.

Examples:

cd /home/pi

$ sudo apt install -y python-flask python-picamera git
$ git clone https://github.com/miguelgrinberg/flask-video-streaming.git

$ cd flask-video-streaming

Run command:

$ CAMERA=pi python app.py

Open a browser on your PC and go to the URL:

* <http://ip_address:5000>

WiFi configuration USB or board adapter 5.8Ghz.

$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Contents:

#ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
#update_config=1

ctrl_interface=/var/run/wpa_supplicant
network={
    ssid="SSID_NAME"
    scan_ssid=1
    key_mgmt=WPA-PSK
    group=TKIP CCMP
    pairwise=TKIP CCMP
    #proto=WPA WPA2
    key_mgmt=WPA-PSK
    psk="password"
}

Check WiFi device

$ lsusb
Bus 001 Device 004: ID 0e8d:7610 MediaTek Inc.

If request after reboot install driver:

Driver installation:

  • https://www.raspberrypi.org/forums/viewtopic.php?t=205240

    $ sudo mkdir /lib/firmware/mediatek $ cd /lib/firmware/mediatek $ sudo wget http://anduin.linuxfromscratch.org/sources/linux-firmware/mediatek/mt7610u.bin $ sudo modprobe -r mt76x0 $ sudo modprobe mt76x0 $ sudo reboot

    $ ifconfig

Example result:

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.192.109  netmask 255.255.255.0  broadcast 192.168.192.255
        inet6 fe80::ea9:41d4:7ab4:273c  prefixlen 64  scopeid 0x20<link>
        ether 70:f1:1c:28:af:56  txqueuelen 1000  (Ethernet)
        RX packets 44  bytes 15932 (15.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 28  bytes 4601 (4.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Now Install Chromium browser:

$ sudo apt-get update
$ sudo apt-get install chromium-browser
$ sudo apt-get install xorg

Create the service:

$ sudo nano /lib/systemd/system/chromium.service

Contents:

[Unit]
Description=Launch Chromium
After=systemd-user-sessions.service

[Service]
ExecStartPre=/bin/sleep 10

ExecStart=/usr/bin/xinit -bg black -fg black -geometry 132x36 -e "runuser pi -c 'chromium-browser --incognito -kiosk --check-for-update-interval=1209600 --simulate-outdated-no-au="Tue, 31 Dec 2099 23:59:59 GMT" --window-position=0,0 --window-size=800,480 "https://www.acmesystems.it"'" -- -s 0 -dpms

Restart=on-abort
User=root
WorkingDirectory=/home/pi

[Install]
WantedBy=multi-user.target

Enable the service:

$ sudo systemctl daemon-reload
$ sudo systemctl enable chromium.service
$ sudo reboot

CM3-Panel-7-poe technical documentation Buy on-line