MasaApps360
English
Periphery

How to read, write and subscribe to a BLE characteristic from your iPhone

This is the screen for working directly with a device's firmware. Open the device in Periphery's inspector and each characteristic shows buttons for what it actually supports: Read fetches the value, Write sends bytes you type in hex, Notify subscribes to live updates until you tap Stop Notify. Switch the display between Hex, Decimal, ASCII and Binary as needed. No laptop required.

3 min read · Updated 2026-10-06

BLE services, characteristics and properties in one minute

A BLE device files its data into services, and each service holds characteristics underneath. One characteristic, one value, a battery level or a data channel, say, and its properties decide what you are allowed to do with it: read, write, or get notified on change. Periphery marks those as small tags on each row, R for read, W for write, N for notify or indicate.

How to read a characteristic

  1. Tap Scan, then tap your device. Periphery connects and lists its services.
  2. Find a characteristic with an R tag and tap Read.
  3. The value appears under the characteristic. Use the Format picker to switch between Hex, Decimal, ASCII and Binary.

How to write bytes to a characteristic

  1. Tap Write on a characteristic with a W tag. The Write Hex sheet opens.
  2. Type the bytes as hexadecimal pairs, for example 01 FF. Spaces are optional.
  3. Check the line under the field: it says how many bytes will be sent, or warns that the text is not valid hexadecimal.
  4. Tap Send, or Cancel to close without writing.

Write with response, and Periphery uses it, waiting for the device to confirm before moving on. Write without response, and the bytes just go, no confirmation at all, so read the value back yourself or watch for a notification if you need to know it landed.

How to subscribe to notifications

  1. Tap Notify on a characteristic with an N tag.
  2. Every time the device sends a new value, it replaces the one shown under the characteristic.
  3. Tap Stop Notify to unsubscribe. Leaving the inspector disconnects and ends all subscriptions.

Worked example: one value, four formats

Say a characteristic hands back the same three bytes you might send to a test board. Here is how each format renders that:

The same three bytes in each format
FormatShown as
Hex01 41 42
Decimal1 65 66
Binary00000001 01000001 01000010
ASCIIOnly the first byte does not print; the other two show as letters, AB

A Battery Level characteristic (2A19) returning 5A in hex reads as 90 in decimal, meaning 90 %. For text fields, Manufacturer Name and the like, ASCII is just easier on the eyes.

Logging a test session with Pro

Pro saves every read, write and notification automatically, with a timestamp, direction, characteristic UUID and the raw bytes attached. The Logs tab lists each session by packet count; swipe one and tap Export to pull it out as plain text, or Delete to drop it. Leave the inspector on an empty session and it just gets discarded. No Pro, no logging, nothing saved at all.

Tips and common mistakes

  • The buttons only ever show what the characteristic actually allows. No Read button means that property is not set, not the app hiding something from you.
  • BLE multi-byte numbers are usually little-endian. 34 12 in hex reads as 0x1234, not 0x3412.
  • A read or write failing often just means the characteristic wants pairing or encryption first. Let iOS handle the pairing prompt, then try again.
  • Usually only one connection at a time. Disconnect your own test app, or the other phone, before Periphery can get in.

Questions and answers

What is the difference between notify and indicate?
Both push new values to you without any reading on your part; indicate just also asks for an acknowledgement back. Periphery tags both with N and subscribes to either one through the same Notify button, no separate path.
Can I write text instead of hex?
Not directly, the write sheet only takes hex bytes. Want to send the text AB? Type its ASCII codes instead, 41 42.
Why do I see Connecting… and then an error?
The device simply did not accept the connection inside 10 seconds. Out of range, already connected elsewhere, or just not accepting connections right now, any of the three.
Can I read descriptors?
Not as separate rows, no. The inspector works at the characteristic level only, read, write, notify; descriptor values do not get their own view.

You might also like

More Periphery guides