Skip to main content

pysimavr is a python wrapper for simavr which is AVR and arduino simulator

Links:

Travis Coveralls Latest Version Supported Python versions License Downloads Code Health Documentation

Features:
  • python wrapper using swig

  • simavr source code and avr-libc headers are included for easier installation

  • object oriented interface on top of the generated interface

  • maximum speed can be real-time

  • serial communication

  • check simavr documentation

Basic usage

>>> from pysimavr.avr import Avr
>>> avr=Avr(mcu='atmega48',f_cpu=8000000)
>>> firmware = Firmware('lcd.elf')
>>> avr.load_firmware(firmware)
>>> from pysimavr.sim import ArduinoSim
>>> print ArduinoSim(snippet='Serial.print("hello!");').get_serial()
hello!

Installation

check simavr documentation

General

  • install python

  • install pip

  • install swig (for source build only)

  • install header files and a static library for Python (for source build only)

  • install a compiler (for source build only)

  • install elf library

  • install the program:

    # as root
    pip install pysimavr

Ubuntu 14.04

sudo apt-get install python-pip
sudo apt-get install python-dev gcc libelf-dev arduino
sudo pip install pysimavr
# optional for some tests:
sudo apt-get install freeglut3-dev scons swig

Uninstall

# as root
pip uninstall pysimavr

Usage

pysimavr.examples.simple:

#-- include('examples/simple.py')--#
from pysimavr.avr import Avr

if __name__ == "__main__":
    avr = Avr(mcu='atmega48', f_cpu=8000000)
    print( avr.pc )
    avr.step(1)
    print( avr.pc )
    avr.step(1)
    print( avr.pc )

    avr.terminate()
#-#

Output:

#-- sh('python -m pysimavr.examples.simple ')--#
0
2
4
#-#

pysimavr.examples.hello:

#-- include('examples/hello.py')--#
from pysimavr.sim import ArduinoSim

if __name__ == "__main__":
    s= ArduinoSim(snippet='Serial.println("hello!");').get_serial()
    print(s)
#-#

Output:

#-- sh('python -m pysimavr.examples.hello ')--#
hello!

#-#

pysimavr.examples.delay:

#-- include('examples/delay.py')--#
from pysimavr.sim import ArduinoSim
import time

snippet = '''
int i=0;
while (1)
{
    Serial.println(i++);
    _delay_ms(1000);
}
'''
t0 = None


def logger(x):
    global t0
    t = time.time()
    if not t0:
        t0 = t
    print t - t0, x


f_cpu=16000000
fps=20
speed=1
timespan=5

if __name__ == "__main__":
    ArduinoSim(snippet=snippet,
           timespan=timespan,
           serial_line_logger=logger,
           f_cpu=f_cpu,
           fps=fps,
           speed=speed,
           ).run()
#-#

Output:

#-- sh('python -m pysimavr.examples.delay ')--#
0.0 0

1.00977802277 1

2.01976013184 2

3.02968215942 3

4.03792500496 4

#-#

vcd export example

pysimavr.examples.vcd:

#-- include('examples/vcd.py')--#
from pysimavr.sim import ArduinoSim


vcdfile='delay.vcd'
snippet = '''
    Serial.println("start");
    pinMode(0, OUTPUT);
    digitalWrite(0, HIGH);
    delay(100);
    digitalWrite(0, LOW);
    delay(100);
    digitalWrite(0, HIGH);
    delay(100);
    digitalWrite(0, LOW);
    delay(100);
    Serial.println("end");
'''

if __name__ == "__main__":
    sim = ArduinoSim(snippet=snippet, vcd=vcdfile, timespan=0.5)
    sim.run()
#-#
gtkwave_id0.png

File hierarchy

|-docs                   sphinx documentation
|---.build               generated documentation
|-pysimavr               main python package, high level classes
|---examples             examples
|---swig                 all swig files (simavr and parts)
|-----include            copy of simavr generated *.h files
|-------avr              copy from avr-libc
|-----parts              some electronic parts in c
|-----simavr             simavr as git submodule
|-tests                  unit tests

How to update external sources

  1. copy avr-libc headers (Ubuntu folder: /usr/lib/avr/include/avr/) into pysimavr/swig/include/avr

  2. simavr is a git submodule. Run ‘make’ inside simavr directory, then copy generated sim_core_config.h and sim_core_decl.h into pysimavr/swig/include

Metadata

Release files for pysimavr 0.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pysimavr 0.2.2
File Size Uploaded
pysimavr-0.2.2.tar.gz 1.1 MB Details

Release files / pysimavr-0.2.2.tar.gz

Download URL pysimavr-0.2.2.tar.gz
Size 1.1 MB
Tags Source
SHA-256 checksum
How to use checksums
70d49d3500d0381e6695f492e97eb86164ddc403ca03780ca2787f4641b20926
BLAKE2b-256 checksum
How to use checksums
2fe4ac33181c5c9acd2f9ae41b76ce5b7fcb9bb81004b5f1d2ad9cde409cae8c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.2.2 This release

1 release file

0.2.1

1 release file

0.2

1 release file

0.1.0

1 release file

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

0.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page