## Determining Pi serial number

Posts: 6
Joined: Wed Mar 01, 2017 5:15 pm

### Determining Pi serial number

It looks like there are a number of ways to get it by going into the operating system, but is serial number printed somewhere on the board? To confirm, trying to working with the Raspberry Pi 3 B+

DavidCoder
Posts: 6
Joined: Wed Oct 09, 2019 1:12 am

### Re: Determining Pi serial number

Sorry, but the serial number can only be found from the pi interface, not printed on the pi as far as I know. I'm sorry for the inconvenience.

Andyroo

### Re: Determining Pi serial number

Just be aware they are not unique

Due to the number being made the chance of getting two the same is very very small...

trackseven
Posts: 2
Joined: Fri Oct 11, 2019 7:12 pm

### Re: Determining Pi serial number

I found this in another post

Code: Select all

# revised 08-17-2019
#!/usr/bin/python3
#--------------------------------------
#
#                mypi.py
#  Functions to display Pi properties
#
#  If called directly outputs :
#  - Pi Model
#  - Revision number
#  - Serial number
#  - Python version
#  - I2C,SPI and Bluetooth status
#  - CPU temperature
#  - GPU temperature
#
# Author : Matt Hawkins
# Date   : 06/12/2017 Revised 08-17-2019 for my Pi Zero W (by kflmiami420)
#
# https://www.raspberrypi-spy.co.uk/
#
#--------------------------------------

import platform
import subprocess
import os
import socket

from uuid import getnode as get_mac

# Define functions

def getModel():
# Extract Pi Model string
try:
except:
mymodel = "Error"

return mymodel

def getSerial():
# Extract serial from cpuinfo file
mycpuserial = "Error"
try:
f = open('/proc/cpuinfo','r')
for line in f:
if line[0:6]=='Serial':
mycpuserial = line[10:26]
f.close()
except:
mycpuserial = "Error"

return mycpuserial

def getRevision():
# Extract board revision from cpuinfo file
myrevision = "Error"
try:
f = open('/proc/cpuinfo','r')
for line in f:
if line[0:8]=='Revision':
myrevision = line[11:-1]
f.close()
except:
myrevision = "Error"

return myrevision

try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect((target, 8000))
s.close()
except:
pass

def getCPUtemp():
# Extract CPU temp
try:
temp = subprocess.check_output(['vcgencmd','measure_temp'])
temp = temp[5:-3]
except:
temp = '0.0'
temp = '{0:.2f}'.format(float(temp))
return str(temp)

def getGPUtemp():
# Extract GPU temp
try:
temp = subprocess.check_output(['cat','/sys/class/thermal/thermal_zone0/temp'])
temp = float(temp)/1000
except:
temp = 0.0
temp = '{0:.2f}'.format(temp)
return temp

def getRAM():
# free -m
output = subprocess.check_output(['free','-m'])
lines = output.splitlines()
line  = str(lines[1])
ram = line.split()
# total/free
return (ram[1],ram[3])

def getDisk():
# df -h
output = subprocess.check_output(['df','-h'])
lines = output.splitlines()
line  = str(lines[1])
disk  = line.split()
# total/free
return (disk[1],disk[3])

def getCPUspeed():
# Get CPU frequency
try:
output = subprocess.check_output(['vcgencmd','get_config','arm_freq'])
output = output.decode()
lines = output.splitlines()
line  = lines[0]
freq = line.split('=')
freq = freq[1]
except:
freq = '0'
return freq

def getUptime():
# uptime
# tupple uptime, 5 min load average
return 0

def getPython():
# Get current Python version
# returns string
pythonv = platform.python_version()
return pythonv

def getSPI():
# Check if SPI bus is enabled
# by checking for spi_bcm2### modules
# returns a string
spi = "False"
try:
c=subprocess.Popen("lsmod",stdout=subprocess.PIPE)
gr=subprocess.Popen(["grep" ,"spi_bcm2"],stdin=c.stdout,stdout=subprocess.PIPE)
output = gr.communicate()[0]
if output[:8]=='spi_bcm2':
spi = "True"
except:
pass
return spi

def getI2C():
# Check if I2C bus is enabled
# by checking for i2c_bcm2### modules
# returns a string
i2c = "False"
try:
c=subprocess.Popen("lsmod",stdout=subprocess.PIPE)
gr=subprocess.Popen(["grep" ,"i2c_bcm2"],stdin=c.stdout,stdout=subprocess.PIPE)
output = gr.communicate()[0]
if output[:8]=='i2c_bcm2':
i2c = "True"
except:
pass
return i2c

def getBT():
# Check if Bluetooth module is enabled
# returns a string
bt = "False"
try:
c=subprocess.Popen("lsmod",stdout=subprocess.PIPE)
gr=subprocess.Popen(["grep" ,"bluetooth"],stdin=c.stdout,stdout=subprocess.PIPE)
output = gr.communicate()[0]
if output[:9]==b'bluetooth':
bt = "True"
except:
pass
return bt

if __name__ == '__main__':
# Script has been called directly

myRAM = getRAM()
myDisk = getDisk()
host = socket.gethostname()
mac = get_mac()

macString = ':'.join(("%012X" % mac)[i:i+2] for i in range(0, 12, 2))

print("----------------------------------------")
print("Pi Model             : " + getModel())
print("----------------------------------------")
print("Host                 :", host)
print("----------------------------------------")
print("System               : " + platform.platform())
print("Revision Number      : " + getRevision())
print("Serial Number        : " + getSerial())
print("Python version       : " + platform.python_version())
print("----------------------------------------")
print("I2C enabled          : " + getI2C())
print("SPI enabled          : " + getSPI())
print("Bluetooth enabled    : " + getBT())
print("----------------------------------------")
print("CPU Clock            : " + getCPUspeed() + "MHz")
print("CPU Temperature      : " + getCPUtemp() + u"\u00b0" +"C")
print("GPU Temperature      : " + getGPUtemp() + u"\u00b0" +"C")
print("RAM (Available)      : " + myRAM[0] + "MB (" + myRAM[1] + "MB)")
print("Disk (Available)     : " + myDisk[0] + " (" + myDisk[1] + ")")
print("----------------------------------------")
print("Wireless MAC Address : " + macString )

B.Goode
Posts: 10549
Joined: Mon Sep 01, 2014 4:03 pm
Location: UK

### Re: Determining Pi serial number

trackseven wrote:
Fri Oct 11, 2019 11:18 pm
I found this in another post

Code: Select all

# sample code suppressed from this reply

So that is an example of "ways to get it by going into the operating system"

But the real question was " is serial number printed somewhere on the board?"

To which I believe, as with the first reply given, the answer is No.

DougieLawson
Posts: 39798
Joined: Sun Jun 16, 2013 11:19 pm
Location: A small cave in deepest darkest Basingstoke, UK

### Re: Determining Pi serial number

The serial is written to the OTP bits during manufacture (may be different on a 4B) and is only internal to the hardware, it is not externalised on any kind of sticker or ink jet printing.

Search Google there's a hundred and one ways to get the serial.

I like the three methods that Andrew Duncan has at: https://github.com/AndrewFromMelbourne/ ... rialnumber

There's even one that didn't exist before device tree /sys/firmware/devicetree/base/serial-number (that file has no new line, but it's a simple file read with no parsing needed).
Note: Any requirement to use a crystal ball or mind reading will result in me ignoring your question.

Criticising any questions is banned on this forum.

All fake doctors are on my foes list.

Posts: 6
Joined: Wed Mar 01, 2017 5:15 pm

### Re: Determining Pi serial number

Thanks, to confirm it was the Raspberry Pi 3 B+ model. All signs point to the fact that you have to login to the device to get the serial number, and there is a chance (although small), that you could have two devices with the same serial number.

jamesh
Raspberry Pi Engineer & Forum Moderator
Posts: 27027
Joined: Sat Jul 30, 2011 7:41 pm